レポートの見栄えを良くするために、SQL クエリを改良しようとしています。私のクエリは、1 つのテーブルからデータを読み取り、いくつかの列でグループ化し、いくつかの集計フィールド (カウントと合計) を計算します。
SELECT A, B, C, COUNT(*), SUM(D) FROM T
GROUP BY A, B, C
ORDER BY A, B, C
ここで、B 列と C 列が定義済みの定数文字列であると仮定しましょう。たとえば、B は'B1'
または'B2'
、C は'C1'
または'C2'
です。したがって、結果セットの例は次のとおりです。
A | B | C | COUNT(*) | SUM(D)
--------------------------------
A1 | B1 | C1 | 34 | 1752
A1 | B1 | C2 | 4 | 183
A1 | B2 | C1 | 199 | 8926
A1 | B2 | C2 | 56 | 2511
A2 | B1 | C2 | 6 | 89
A2 | B2 | C2 | 12 | 231
A3 | B1 | C1 | 89 | 552
...
ご覧のとおり、'A1'
4 つの可能な (B、C) の組み合わせがすべてありますが、それは には当てはまりません'A2'
。私の質問は、実際には、指定されたテーブルに存在しない (B, C) の組み合わせの集計行を生成するにはどうすればよいですか? つまり、たとえば次の行も印刷するにはどうすればよいですか。
A | B | C | COUNT(*) | SUM(D)
--------------------------------
A2 | B1 | C1 | 0 | 0
A2 | B2 | C1 | 0 | 0
私が見ることができる唯一の解決策は、すべての (B, C) 値を持ついくつかの補助テーブルを作成し、その補助テーブルで RIGHT OUTER JOIN を作成することです。しかし、私はよりクリーンな方法を探しています...
皆さん、ありがとうございました。