我有一个这个结构的输入表
输入:
Col1 |Col2 |Col3
O1 | 小一 |100
O1 | 小二 |200
O1 | 小三 |300
O2 | 小一 |100
O2 | 小二 |200
我需要找到不同的组合并同时聚合另一列中的值。
预期输出 :
Col1 |Col2 |二氧化碳3
O1 | P1,P2 |300
O1 | P2,P3 |500
O1 | 小三,小一 |400
O1 | P1,P2,P3 |600
O2 | P1,P2 |300
需要有关如何解决此问题以及从何处开始的一些帮助。
你可以试试这个(其中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