我真的需要你的SQL请求帮助。
我有一张这样的表:
ID|LABEL|PRICE
1 |A |10
2 |B |15
3 |C |20
4 |D |30
5 |E |35
我想通过sql请求(或pl / sql程序)得到所有可能的组合,如下所示:
A, AB, AC, AD, AE, ABC, ABD, ABE, AC, ABCD, ABCE, ABCDE... DE, BDE, CE...
每个标签只能出现一次,例如,ABA是不可能的,我认为它就像一个因子数学函数?
我尝试用"以"开头"通过"连接但我不明白如何正确使用它。
你有想法得到这个吗?
感谢您的帮助。
查尔斯
答案 0 :(得分:5)
尝试此查询
select sys_connect_by_path( label, ';' )
from table1
connect by nocycle label <> prior label
;
或者这个:
select sys_connect_by_path( label, ';' )
from table1
connect by nocycle label > prior label
;
========== 编辑 ==========
要获得价格总和,您可以使用子查询因子条款:
WITH abc( label, pricesum, pricelist, lastlabel) AS (
SELECT label,
price,
cast( price as varchar2(1000)),
label
FROM table1
UNION ALL
SELECT a.label || ';' || b.label,
a.price + b.price,
a.pricelist|| '+'||b.price ,
b.label
FROM abc a
JOIN table1 b
ON b.label > a.lastlabel
) CYCLE label SET cycle TO 1 DEFAULT 0
SELECT * FROM abc;
第三列pricelist
显示了正在汇总的所有价格的列表,
例如:
label pricesum pricelist lastlabel
A 10 10 A 0
B 15 15 B 0
A;B 25 10+15 B 0
A;C 30 10+20 C 0
A;D 40 10+30 D 0
A;C;D 60 10+20+30 D 0
A;C;E 65 10+20+35 E 0
A;B;D;E 90 10+15+30+35 E 0
A;C;D;E 95 10+20+30+35 E 0
B;C;D;E 100 15+20+30+35 E 0