我真的需要你的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是不可能的,我认为它就像一个因子数学函数?
我尝试"开始""连接",但我不明白如何正确使用它.
你有想法得到这个吗?
谢谢你的帮助.
查尔斯
试试这个查询
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