문제

다음 테이블이있는 쿼리가 있습니다 (관심있는 열만 표시하도록 축소).

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
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top