1

ロールアップを使用して集計を取得し、それらを表形式でユーザーに表示しています。

ただし、ロールアップ内で、ロールアップされる行の数が同じ、つまり最大のサブセットの数であることを確認したいと思います。

例を使用すると、必要なものがより明確になると思うので、以下のオラクルで簡単な例をセットアップします。

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'} の可能な値のセットであると想像してください...私は答えを答えとしてマークしました。それは私が尋ねた質問に答えました、そして私のせいです:(

4

2 に答える 2