質問

次の表を含むクエリがあります(関心のある列のみを表示するように縮小されています)。

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
役に立ちましたか?

解決

クロス結合を使用して、すべての期間のすべてのコードのマトリックスを選択できます。これにより、存在しない行をカウントできます。

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