我对 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 分组的 Bs 和 Cs 的总量。例如:
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
第一行 B_QTY 的 30 是 20 + 5 + 5 的结果。
第一行 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)来区分求和。谢谢!