1 sql oracle recursion combinations factorial
我真的需要你的SQL请求帮助.
我有这样一张桌子:
ID|LABEL|PRICE
1 |A |10
2 |B |15
3 |C |20
4 |D |30
5 |E |35
Run Code Online (Sandbox Code Playgroud)
我想得到所有组合可能与sql请求(或pl/sql程序)喜欢这样:
A, AB, AC, AD, AE, ABC, ABD, ABE, AC, ABCD, ABCE, ABCDE... DE, BDE, CE...
Run Code Online (Sandbox Code Playgroud)
每个标签只能出现一次,例如,ABA是不可能的,我认为它就像一个因子数学函数?
我尝试"开始""连接",但我不明白如何正确使用它.
你有想法得到这个吗?
谢谢你的帮助.
查尔斯
试试这个查询
select sys_connect_by_path( label, ';' )
from table1
connect by nocycle label <> prior label
;
Run Code Online (Sandbox Code Playgroud)
或者这个:
select sys_connect_by_path( label, ';' )
from table1
connect by nocycle label > prior label
;
Run Code Online (Sandbox Code Playgroud)
========== 编辑 ==========
要获得价格总和,您可以使用子查询因子子句,这样:
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;
Run Code Online (Sandbox Code Playgroud)
第三列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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1812 次 |
| 最近记录: |