2011-01-16 3 views
1

2 개의 열로 그룹화 된 수를 가져와야하는 테이블이 있습니다.왼쪽 외부 조인을 사용하여 같은 테이블에서 카운트를 얻으려는 SQL 쿼리

테이블은 두 개의 열이 하나 datetime 열이 있고 다른 내가 무엇을 찾고 성공 값 (-1,1,0) 이다이 같은 것입니다 : 매월 성공 값의

수 :

개월 ---- ----- 성공 횟수
11 ------- -1 ------- 50

11 ------- 1 - -------- 50

,210

11 ------- 0 ------- 50

12 ------- -1 ------- 50

12-- ----- 1 ------- 50

(12) ------- 0 ------- 50

한 달에 대한 성공 값이없는 경우 카운트는 null 또는 0이어야합니다. 왼쪽 외부 조인도 시도했지만 사용하지 않으면 잘못 계산됩니다.

답변

1

당신은 다음 실제 데이터

select m.month, s.success, COUNT(t.month) 
from (select distinct MONTH from tbl) m 
cross join (select -1 success union all select 1 union all select 0) s 
left join tbl t on t.month = m.month and t.success = s.success 
group by m.month, s.success 

당신은뿐만 아니라 달없는이 필요한 경우에 가입 남아있을 수있는 가상 매트릭스를 구축하기 위해 3 개 성공 값에 대해 사용 가능한 모든 달에 가입 교차 할 필요가 위의 하위 쿼리 "m"을 변경하면 약간 더 복잡해집니다.

@ 업데이트 된 Count (*)는 항상 왼쪽 조인을 위해 1을 반환합니다. 왼쪽 조인의 오른쪽 부분에서 count (colname)가 올바른지 확인하십시오.

+0

안녕하세요 쿼리는 예상대로 행 수를 반환하지만 특정 달에 대해 1로 반환됩니다. 0이어야합니다. ( – Sasi

+0

감사합니다. 올바른 결과를주었습니다. – Sasi

0

0- 카운트를 얻을 수 있도록 1-12의 값만 가진 테이블이 필요할 수 있습니다.

관련 문제