2017-05-31 47 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 

由於您使用的是有條件的聚集內部的列,你不要被它需要組。該列的值很可能會導致多行。