2011-09-06 5 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
ServiceDatePaidDateJOIN 절에 NULL을해야합니다 때문에 OUTER JOIN의 보존

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

국가 행을 필터를 이동하고 있으므로 WHERE 절에서 제외 치울

.

또한 게시 된 쿼리 버전에 GROUP BY e.GeographyKey이 누락 된 것처럼 보이며 DISTINCTGROUP BY이 필요하지 않습니다.

+1

정말 감사 마틴! 이것은 나를 위해 일했습니다! 그리고 네, 내 그룹 by 절에서 복사하는 것을 잊었지만 원래 쿼리에서 사용했습니다. 나는 별개 함을 제거 할 것이고, 내가 거기에 넣었다는 것을 깨닫지 못했다. –

1

AND 즉와 WHERE 교체 :

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