我有一个这种结构的输入表
输入:
Col1 | Col2 | COL3
O1 | P1 | 100个
O1 | P2 | 200个
O1 | P3 | 300个
O2 | P1 | 100个
O2 | P2 | 200
我需要找到不同的组合并同时聚合另一列中的值。
预期输出:
Col1 | Col2 | COL3
O1 | P1,P2 | 300
O1 | P2,P3 | 500
O1 | P3,P1 | 400
O1 | P1,P2,P3 | 600
O2 | P1,P2 | 300
如何解决此问题以及从何处开始需要一些帮助。
答案 0 :(得分:1)
你可以试试这个(X是你的桌子):
WITH RECURSIVE R AS (SELECT X.COL1, X.COL2, CAST(X.COL2 AS VARCHAR(100)) AS COMBI, COL3 AS TOT
FROM X
UNION ALL
SELECT X.COL1, X.COL2, CAST( r.COMBI || CAST(',' AS VARCHAR(1)) || X.COL2 AS VARCHAR(100)), X.COL3+R.TOT AS TOT
FROM R
INNER JOIN X ON X.COL2 > R.COL2 AND X.COL1 = R.COL1)
SELECT COL1, COMBI, TOT
FROM R
WHERE LENGTH(COMBI) >LENGTH(COL2)
ORDER BY COL1, LENGTH(COMBI), COMBI
;
输出(包含您发布的数据):
col1 combi tot
1 O1 P1,P2 300
2 O1 P1,P3 400
3 O1 P2,P3 500
4 O1 P1,P2,P3 600
5 O2 P1,P2 300
输出(在O1中添加另一行P4):
col1 combi tot
1 O1 P1,P2 300
2 O1 P1,P3 400
3 O1 P1,P4 500
4 O1 P2,P3 500
5 O1 P2,P4 600
6 O1 P3,P4 700
7 O1 P1,P2,P3 600
8 O1 P1,P2,P4 700
9 O1 P1,P3,P4 800
10 O1 P2,P3,P4 900
11 O1 P1,P2,P3,P4 1000
12 O2 P1,P2 300