在单个列中查找值的组合 - Postgresql



我有一个这个结构的输入表

输入:

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

最新更新