2011-09-06 16 views
2

Countiesテーブルに結合するクエリがあります。そのテーブルには14の異なる郡が含まれています。私は時間の経過から各郡の会員数を数えています。私が選択した時間帯に特定の郡のメンバーが含まれていない場合、郡のテーブルに右結合または内部結合を使用しても、郡は表示されません。私の目標は、郡から戻ったメンバーがいない場合、その郡の合計を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
ため OUTER JOINの保存国の行が ServiceDatePaidDateため NULLを持っているので、あなたの WHERE句で除外なってしまいます JOIN

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

にあなたのフィルタを動かし

投稿されたクエリのバージョンにGROUP BY e.GeographyKeyがありません。DISTINCTGROUP BYは必要ありません。

+1

本当にありがとうございましたマーティン!これは私のために働いた!そして、はい、私はグループ句でコピーするのを忘れましたが、私は元のクエリでそれを持っていました。私は別個にも削除されます、私はそこに置くことを認識していませんでした。 –

1

ANDすなわちでWHEREを置き換えます

ON  a.GeographyKey = e.GeographyKey 
AND LEFT(ServiceDate, 6) >= 201001  
AND LEFT(PaidDate, 6) BETWEEN 201010 AND 201012 
関連する問題