2011-09-06 56 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 
相关问题