创建所有可能的文本组合

时间:2018-09-15 12:01:12

标签: sql sql-server tsql

需要TSQL的帮助才能从文本创建所有可能的组合。

我有如下数据

Input
A
B
C

需要如下所示的结果

Output
ABC
BCA
CAB
CBA
BAC
ACB

2 个答案:

答案 0 :(得分:1)

您可以使用join

select i1.col, i2.col, i3.col
from input i1 join
     input i2
     on i2.col not in (i1.col) join
     input i3
     on i3.col not in (i1.col, i2.col);

Here是该解决方案的中期。

编辑:

在我看来,您可能想更改input的长度,并且您确实希望具有所有排列的字符串。

如果是这样,可以使用递归CTE来处理:

with input as (
      select v.x
      from (values ('a'), ('b'), ('c')) v(x)
     ),
     cte as (
      select cast(x as varchar(max)) as str, 1 as len
      from input
      union all
      select cte.str + i.x, len + 1
      from cte join
           input i
           on cte.str not like '%' + i.x + '%'
     )
select top (1) with ties str
from cte
order by len desc;

Here是使用此解决方案的SQL Fiddle。

答案 1 :(得分:0)

我认为十字架可以产生所有可能的组合

 select t2.c+t3.col from 
(select t1.col+t2.col as c
from t t1 cross join
     t t2
     ) as t2 cross join
     t t3

https://dbfiddle.uk/?rdbms=sqlserver_2016&fiddle=7a22b3c1f5fe81be1e2f3ec09311bd87