ロールアップを使用して集計を取得し、それらを表形式でユーザーに表示しています。
ただし、ロールアップ内で、ロールアップされる行の数が同じ、つまり最大のサブセットの数であることを確認したいと思います。
例を使用すると、必要なものがより明確になると思うので、以下のオラクルで簡単な例をセットアップします。
create table test (
co_name varchar2(100),
rtype number,
some_count number
) ;
insert all
into test (co_name, rtype, some_count) values ('A', 1, 5)
into test (co_name, rtype, some_count) values ('A', 2, 6)
into test (co_name, rtype, some_count) values ('A', 3, 7)
into test (co_name, rtype, some_count) values ('B', 1, 8)
into test (co_name, rtype, some_count) values ('B', 2, 9)
SELECT * FROM DUAL
;
select * from test;
SELECT
co_name,
rtype,
count(some_count)
FROM test
GROUP BY ROLLUP(co_name, rtype)
これにより、次の結果が得られます。
CO_NAME RTYPE SOME_COUNT
A 1 5
A 2 6
A 3 7
A 18
B 1 8
B 2 9
B 17
B 35
もちろん、B には RTYPE の行が 1 と 2 の 2 つしかないことに気付くでしょう。これは、CO_NAME = B AND RTYPE = 3 の行が 0 行あるためです。
ロールアップが返す結果の数を一定に保つ方法はありますか? 私が見たいのは、次のことです。
CO_NAME RTYPE SOME_COUNT
A 1 5
A 2 6
A 3 7
A 18
B 1 8
B 2 9
B 3 0
B 17
35
ここでの提案は非常に役に立ちます。アプリケーションを愚かにして、欠落しているデータを考慮せずに結果を集計するだけにしたいからです。クエリで必要なものをすべて取得したいと思います。
ありがとう!
編集:私はドープです...上記のサンプルでは、物事を単純にしたかったのですが、間違いを犯しました。RTYPES が {1,2,3} の可能な値のセットである代わりに、{'x','y','z'} の可能な値のセットであると想像してください...私は答えを答えとしてマークしました。それは私が尋ねた質問に答えました、そして私のせいです:(