我又有问题了。先把题目简化一下。只有一张黑卡,颜色也只能选两种,最多加三张卡。那么sql应该改成这样吧
select*from (
select sys_connect_by_path(p||c,',') ssssssssssssss
from (select chr(64+level) p
from dual
connect by level<=2
)
,(select level c from dual connect by level<=2)
connect by level<=3 and p>=prior p and prior sys_guid() is not null
) t1
where length(t1.ssssssssssssss) > -3
;
结果集为
,A1
,A1,A1
,A1,A1,A1
,A1,A1,A2
,A1,A1,B1
,A1,A1,B2
,A1,A2
,A1,A2,A1
,A1,A2,A2
,A1,A2,B1
,A1,A2,B2
,A1,B1
,A1,B1,B1
,A1,B1,B2
,A1,B2
,A1,B2,B1
,A1,B2,B2
,A2
,A2,A1
,A2,A1,A1
,A2,A1,A2
,A2,A1,B1
,A2,A1,B2
,A2,A2
,A2,A2,A1
,A2,A2,A2
,A2,A2,B1
,A2,A2,B2
,A2,B1
,A2,B1,B1
,A2,B1,B2
,A2,B2
,A2,B2,B1
,A2,B2,B2
,B1
,B1,B1
,B1,B1,B1
,B1,B1,B2
,B1,B2
,B1,B2,B1
,B1,B2,B2
,B2
,B2,B1
,B2,B1,B1
,B2,B1,B2
,B2,B2
,B2,B2,B1
,B2,B2,B2
但是,A1,A1,A2 与 ,A1,A2,A1应该算是一种组合吧。
不过a1a2b1b1 与 a2a1b1b1又应该算是两种组合。
看起来应该对每一行拆分后同字母的直接接合,不同字母间重新排序。这样可以识别出a2a1b1b1,a2b1a1b1是一种组合。 |