开发者

How to show results from a join even if where clause removes those results

开发者 https://www.devze.com 2023-04-03 04:32 出处:网络
I have a query that joins to a Counties table.That table contains 14 different counties.I am counting the number of members in each county from a span of time.When that span of time I choose doesn\'t

I have a query that joins to a Counties table. That table contains 14 different counties. I am counting the number of members in each county from a span of time. When that span of time I choose doesn't include any members from a certain county, the county doesn't show up, no matter if I use a Right join or Inner join to the county table. My goal is that if no members are returned f开发者_JAVA百科rom a county, to show 0 for that county total. How would I do this?

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


Move your filter into the JOIN clause

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

The country rows preserved because of the OUTER JOIN will have NULL for ServiceDate and PaidDate and so end up getting excluded by your WHERE clause.

You also seem to be missing a GROUP BY e.GeographyKey in the posted version of your query and you don't need DISTINCT with GROUP BY.


Replace WHERE with AND i.e:

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

精彩评论

暂无评论...
验证码 换一张
取 消