Tsql T-SQL获取返回的重复行

Tsql T-SQL获取返回的重复行,tsql,Tsql,下面的代码部分将为一些记录返回多个列 选择a.ClientID,ltrimrtrimc.FirstName+“” case when c.MiddleName <> '' then ltrim(rtrim(c.MiddleName)) + '. ' else '' end + ltrim(rtrim(c.LastName)) as ClientName, a.MISCode, b.Address, b.City, dbo.ClientGetEnrolledPrograms(C

下面的代码部分将为一些记录返回多个列

选择a.ClientID,ltrimrtrimc.FirstName+“”

case when c.MiddleName <> '' then
ltrim(rtrim(c.MiddleName)) + '. ' 
else '' 
end +

ltrim(rtrim(c.LastName)) as ClientName, a.MISCode, b.Address, b.City, dbo.ClientGetEnrolledPrograms(CONVERT(int,a.ClientID)) as Abbreviation
FROM ClientDetail a
JOIN Address b on(a.PersonID = b.PersonID)
JOIN Person c on(a.PersonID = c.PersonID)
LEFT JOIN ProgramEnrollments d on(d.ClientID = a.ClientID and d.Status = 'Enrolled' and d.HistoricalPKID is null)
LEFT JOIN Program e on(d.ProgramID = e.ProgramID and e.HistoricalPKID is null)
WHERE a.MichiganWorksData=1
我已将该问题隔离到ProgramEnrollments表中。 此表包含一对多关系,其中每个ClientID可以注册到多个程序中。因此,对于客户机注册的每个程序,表中都有一条记录

因此,最终结果集将基于这些联接为ProgramEnrollments表中的每一行返回一行

我想我的加入是个问题,但我看不出有什么问题

想法/建议

谢谢


Chuck

加入不是问题所在,它是在做一对多关系中应该做的事情

您可以在查询中使用GROUP BY语句,或者使用sub select从ProgramEnrollments/Program表返回不同的值


您似乎没有使用ProgramEnrollments或Program表中的数据,所以我想在查询中是否需要它们,只是想问一下这个问题。

您实际上似乎没有使用ProgramEnrollments或Program中的任何列,所以请尝试删除这两个联接。

您是对的。我刚刚意识到我不再需要这两个表中的任何一个,因为我正在函数中处理它们。感谢您的回复。这里的社区很棒。今天刚加入。很高兴我这么做了,我会回来的!