2009-11-26 5 views
0

다음 표가있는 쿼리가 있습니다 (관심있는 열만 표시하도록 줄임).mysql join query

t1 
code 

t2 
code, period, status 

t3 
period, desc 

지금 내가 무엇을

T3는 독특한 "기간"의 테이블입니다.

t1은 고유 코드 테이블입니다.

t2는이 예제 status = (A, B, C)를 위해 두 상태를 함께 연결하는 조인 테이블입니다.

내가하고있는 일은 "기간"으로 그룹화되고 각 상태에 '코드'의 개수가있는 쿼리 결과를 만드는 것입니다.

해결하기 쉽지만 이것을 확장하고 싶다면 A, B 및 C의 코드 수뿐만 아니라 마침표와 연관되지 않은 코드 수 즉 주어진 기간 동안 t2에없는 코드의 수를 의미합니다.

그래서 내가 찾고 있어요 결과는 당신이 모든 기간에 대한 모든 코드의 매트릭스를 선택하기 위해 가입 교차 사용할 수 있습니다

Period A B C (Codes from t1 not found in t2) 
P1  10 5 2 3 
P2  5 5 5 10 

답변

1

입니다. 이렇게하면 존재하지 않는 행 수를 계산할 수 있습니다.

select 
    sum(case when t2.status is 'A' then 1 else 0 end) as ACount, 
    sum(case when t2.status is 'B' then 1 else 0 end) as BCount, 
    ... 
    sum(case when t2.code is null then 1 else 0 end) as NotPresentCount 
from  t1 
cross join t3 
left join t2 
on   t2.code = t1.code and t2.period = t3.period 
group by t3.period 
+0

정확히 내가 원하는 시간입니다. 감사. – kaylnn