私は、レポートを見やすくするためにSQLクエリを改良しようとしています。私のクエリは、1つのテーブルからデータを読み取り、いくつかの列でグループ化し、いくつかの集計フィールド(カウントと合計)を計算します。SQLで空の集計結果を生成する方法
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'
ことができます。私はすべての4つの可能性(B、C)の組み合わせを持っている'A1'
ため
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
...
あなたが見ることができるように、それは'A2'
のために真実ではない:だから、例の結果セットです。私の質問は:どのように(B、C)の組み合わせのサマリー行も、実際には、特定のテーブルに存在しない生成することができますか?
A | B | C | COUNT(*) | SUM(D)
--------------------------------
A2 | B1 | C1 | 0 | 0
A2 | B2 | C1 | 0 | 0
私が見ることができる唯一のソリューションは、すべての(B、C)の値をいくつかauxiliarityテーブルを作成し、RIGHT OUTERがでJOINをすることです:それは私が印刷することができ、例えば、また、これらの行か、ありますその補助テーブル。しかし、私はよりクリーンな方法を探しています...
ありがとうございます。
あなたはmssql、oracel、mysqlを使っていますか?オラクル社 – Arion
。しかし、クエリは現時点では標準的な方法で書かれています(MySQL上でも実行されますが、質問には関係のない理由でDBのMySQLコピーがあります)。 –
[this](http://www.techrepublic.com/article/group-by-grouping-sets-for-custom-rollups-in-oracle/6134424)が役立つかもしれません。グループ化セットは、SQL ServerとOracleの両方で使用できます。 MySQLについてはわかりません。 –