我有一个像这样的表:
Item |SubItem| Loc | Type | Qty
D1 | SD1 |L1 | Type1 | 10
D1 | SD1 |L1 | Type2 | 10
D1 | SD1 | L1 |Type 4 |10
D1 | SD2 |L1 |Type4 | 5
D1 | SD2 |L1 | Type5| 10
D1 | SD2 | L1 | Type1 | 10
我想要三个SUM值:
总结特定子项目的所有类型&同上。
对于特定的SubItem&和,只对类型1,4求和。同上。
特定物品的类型1,4的总和& Loc
Item | SubItem | Loc | Sum1 | Sum2 | Sum3
D1 | SD1 | L1 | 30 | 20 | 55
D1 | SD1 | L1 | 25 | 15 | 55
我在桌子上有各种项目,子项目,loc的组合。
答案 0 :(得分:2)
这可以通过聚合查询(包括条件求和)和分析函数轻松完成,如下所示:
WITH your_table AS (SELECT 'D1' item, 'SD1' subitem, 'L1' loc, 'Type1' TYPE, 10 qty FROM dual UNION ALL
SELECT 'D1' item, 'SD1' subitem, 'L1' loc, 'Type2' TYPE, 10 qty FROM dual UNION ALL
SELECT 'D1' item, 'SD1' subitem, 'L1' loc, 'Type4' TYPE, 10 qty FROM dual UNION ALL
SELECT 'D1' item, 'SD2' subitem, 'L1' loc, 'Type4' TYPE, 5 qty FROM dual UNION ALL
SELECT 'D1' item, 'SD2' subitem, 'L1' loc, 'Type5' TYPE, 10 qty FROM dual UNION ALL
SELECT 'D1' item, 'SD2' subitem, 'L1' loc, 'Type1' TYPE, 10 qty FROM dual)
SELECT item,
subitem,
loc,
SUM(qty) sum1,
SUM(CASE WHEN TYPE IN ('Type1', 'Type4') THEN qty END) sum2,
SUM(SUM(qty)) OVER () sum3
FROM your_table
GROUP BY item,
subitem,
loc;
ITEM SUBITEM LOC SUM1 SUM2 SUM3
---- ------- --- ---------- ---------- ----------
D1 SD1 L1 30 20 55
D1 SD2 L1 25 15 55
返回:
这不是你的问题所说的你所说的,但这是你给出的预期输出。你应该能够调整它以获得你真正需要的东西,如果它不是你想要的那样。
答案 1 :(得分:0)
使用Boneist的代码我改变了最后一个聚合,以便在SUM3中获得正确的值。
WITH your_table AS (SELECT 'D1' item, 'SD1' subitem, 'L1' loc, 'Type1' TYPE, 10 qty FROM dual UNION ALL
SELECT 'D1' item, 'SD1' subitem, 'L1' loc, 'Type2' TYPE, 10 qty FROM dual UNION ALL
SELECT 'D1' item, 'SD1' subitem, 'L1' loc, 'Type4' TYPE, 10 qty FROM dual UNION ALL
SELECT 'D1' item, 'SD2' subitem, 'L1' loc, 'Type4' TYPE, 5 qty FROM dual UNION ALL
SELECT 'D1' item, 'SD2' subitem, 'L1' loc, 'Type5' TYPE, 10 qty FROM dual UNION ALL
SELECT 'D1' item, 'SD2' subitem, 'L1' loc, 'Type1' TYPE, 10 qty FROM dual)
SELECT item,
subitem,
loc,
SUM(qty) sum1,
SUM(CASE WHEN TYPE IN ('Type1', 'Type4') THEN qty END) sum2,
SUM(SUM(CASE WHEN TYPE IN ('Type1', 'Type4') THEN qty END)) OVER (PARTITION BY item) sum3
FROM your_table
GROUP BY item,
subitem,
loc;
ITEM SUBITEM LOC SUM1 SUM2 SUM3
---- ------- --- ---------- ---------- ----------
D1 SD1 L1 30 20 35
D1 SD2 L1 25 15 35