私はSQLにあまり詳しくありません。私はオラクルを使用しています。合計フィールドが多いという質問に出会いました。
以下にテーブルの例を示します。
A:
A_ID
A_NAME
B:
B_ID
A_ID
B_NAME
B_QTY
C:
C_ID
B_ID
C_QTY
したがって、データ構造は A -> *B -> *C のようになります
B_NAME と A_ID でグループ化された B と C の合計量を取得する必要があります。例えば:
A:
A_ID A_NAME
1 A1
B:
B_ID A_ID B_NAME B_QTY
1 1 B1 20
2 1 B1 5
3 1 B1 5
4 1 B2 5
C:
C_ID B_ID C_QTY
1 1 3
2 1 4
4 2 2
5 2 1
6 3 1
7 4 1
期待される結果は次のとおりです。
A_ID A_NAME B_NAME B_QTY C_QTY
1 A1 B1 30 11
1 A1 B2 5 1
1 行目の B_QTY の 30 は、20 + 5 + 5 の結果です。
1 行目の C_QTY の 11 は、3 + 4 + 2 + 1 + 1 の結果です。
ここに私のSQLがあります:
select a.A_ID,
a.A_NAME,
b.B_NAME
sum(b.B_QTY),
sum(c.C_QTY)
from A a left outer join B b on b.A_ID = a.A_ID
left outer join C c on c.B_ID = b.B_ID
group by a.A_ID
order by a.A_ID, b.B_NAME
where a.XXXX = XXXXX;
問題は次のとおりです。
B は複数の C にマップされるため、B_QTY は複数回合計されます。私は SQL にあまり詳しくないので、いくつかのフィールド (私の例では B_ID) に基づいて合計を区別する簡単な方法があるかどうかわかりません。ありがとうございました!