2017-05-31 48 views
0

我有多个查询连接,让我重复记录....这里是我的查询这个查询提供了多行

SELECT  tblB.City, tblA.ShortDesc, 
        SUM(CASE WHEN Code = 'M' THEN 1 ELSE 0 END) AS Male, 
        SUM(CASE WHEN Code = 'F' THEN 1 ELSE 0 END) As Female 

FROM   tblC INNER JOIN 
        tblB ON tblC.ID = tblB.ID INNER JOIN 
        tblE ON tblC.Number = tblE.Number INNER JOIN 
        tblA ON tblE.ServiceID = tblA.ServiceID INNER JOIN 
        tblD ON tblC.IDNumber = tblC.IDNumber 
WHERE  (tblA.ServiceID IN (71)) AND (tblC.Date BETWEEN '1/12/2017' AND '2/31/2017') 
GROUP BY tblB.City, tblA.ShortDesc, tblD.Code 

所以这个查询应该给我的结果是这样的......

City   Male  Female 
LA   17   21 
SF   23   7 

但是我得到是这样的....

City   Male  Female 
LA   17   0 
LA   0   21 
SF   23   0 
SF   0   7 

任何人有为什么发生这种情况的任何想法???

+3

由于您在条件聚合中使用了这种方式,因此似乎并不需要“GROUP BY tblD.Code”。 – ollie

+0

重复的地方在哪里?从分组中删除代码 – scsimon

+0

@ollie表示感谢 – BobSki

回答

4

您应该从查询中删除GROUP BY tblD.Code

SELECT 
tblB.City, 
tblA.ShortDesc, 
SUM(CASE WHEN Code = 'M' THEN 1 ELSE 0 END) AS Male, 
SUM(CASE WHEN Code = 'F' THEN 1 ELSE 0 END) As Female 
FROM tblC 
INNER JOIN tblB 
ON tblC.ID = tblB.ID 
INNER JOIN tblE 
ON tblC.ReferralNumber = tblE.ReferralNumber 
INNER JOIN tblA 
ON tblE.ServiceID = tblA.ServiceID 
INNER JOIN tblD 
ON tblC.IDNumber = tblMember.IDNumber 
WHERE (tblA.ServiceID IN (71)) 
AND (tblC.Date BETWEEN '2017-01-12' AND '2017-02-28') -- there is no Feb 31 
GROUP BY tblB.City, tblA.ShortDesc 

由于您使用的是有条件的聚集内部的列,你不要被它需要组。该列的值很可能会导致多行。