2010-06-11 64 views
0

以下代码部分为几条记录返回多个列。T-SQL获取重复的行返回

SELECT a.ClientID,ltrim(rtrim(c.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表中的每一行返回一行。

我认为我的加入是问题,但我没有看到问题。

想法/建议?

感谢,

回答

0

连接是没有问题的,它是做什么的意思用一个一对多的关系做

你可以在使用GROUP BY语句您查询,或者使用子选择从ProgramEnrollments/Program表中返回DISTINCT值。

你似乎没有使用来自ProgramEnrollments或Program表的数据,所以他们需要查询(我猜他们是,只是想我会问这个问题)。

+0

你说得对。我只是意识到,我不再需要这些表中的任何一个,因为我在函数中处理它们。 谢谢 – cBlaine 2010-06-11 15:16:06

0

您实际上似乎没有使用ProgramEnrollmentsProgram中的任何列,因此请尝试删除这2个JOIN。

+0

感谢您的回复。这里的大社区。今天刚加入。很高兴我做到了,我会回来的! – cBlaine 2010-06-11 15:20:35