2011-09-06 31 views
2

我有一個連接到一個縣表的查詢。該表包含14個不同的縣。我從一段時間內計算每個縣的成員數量。當我選擇的時間段不包括某個縣的任何成員時,無論我是否在縣表中使用Right join或Inner join,該縣都不會顯示出來。我的目標是,如果沒有成員從一個縣返回,則顯示該縣的總數爲0。我將如何做到這一點?如何顯示結果從連接即使where子句中刪除這些結果

SELECT DISTINCT 
    e.County, 
    COUNT(DISTINCT d.MemberID) AS TotalUniqueProviders 
FROM 
    dw.FactMedicalClaimLine a 
INNER JOIN 
    dw.DimMember d 
ON 
    a.MemberKey = d.MemberKey 
RIGHT JOIN 
    dw.DimGeography e 
ON 
    a.GeographyKey = e.GeographyKey 
WHERE 
    LEFT(ServiceDate, 6) >= 201001 
    AND LEFT(PaidDate, 6) BETWEEN 201010 AND 201012 

回答

2

移動你的過濾器進入JOIN條款

RIGHT JOIN 
    dw.DimGeography e 
ON 
    a.GeographyKey = e.GeographyKey 
AND 
    LEFT(ServiceDate, 6) >= 201001 
    AND LEFT(PaidDate, 6) BETWEEN 201010 AND 201012 

因爲OUTER JOIN的保存會有NULL該國行的ServiceDatePaidDate等最終得到排除由您WHERE條款。

您在查詢的發佈版本中似乎也缺少GROUP BY e.GeographyKey,您不需要DISTINCTGROUP BY

+1

非常感謝馬丁!這對我有用!是的,我忘了在我的group by子句中進行復制,但是我在原始查詢中使用了它。我也會刪除這個獨特的,沒有意識到我把它放在那裏。 –

1

AND即更換WHERE

ON  a.GeographyKey = e.GeographyKey 
AND LEFT(ServiceDate, 6) >= 201001  
AND LEFT(PaidDate, 6) BETWEEN 201010 AND 201012