Oracle通过递归获得所有可能的组合

Oracle get all combinations possibilities with recursivity

我真的需要你的帮助 SQL 请求。

我有一个这样的 table :

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是不可能的,我觉得像阶乘数学函数?

我尝试使用 "start with" "connect by" 但我不明白如何正确使用它。

你有什么想法吗?

感谢您的帮助。

查尔斯

试试这个查询

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