문제
다음 테이블이있는 쿼리가 있습니다 (관심있는 열만 표시하도록 축소).
t1
code
t2
code, period, status
t3
period, desc
이제 내가 가진 것은
T3은 독특한 "기간"의 테이블입니다.
T1은 고유 한 코드의 테이블입니다.
T2는이 예제 상태 = (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
해결책
크로스 조인을 사용하여 모든 기간 동안 모든 코드의 행렬을 선택할 수 있습니다. 이를 통해 존재하지 않는 행을 계산할 수 있습니다.
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
제휴하지 않습니다 StackOverflow