Создайте все возможные комбинации текста - PullRequest
0 голосов
/ 15 сентября 2018

Нужна помощь в TSQL для создания всех возможных комбинаций из текста.

У меня есть данные, как показано ниже

Input
A
B
C

Нужен результат, как показано ниже

Output
ABC
BCA
CAB
CBA
BAC
ACB

Ответы [ 2 ]

0 голосов
/ 15 сентября 2018

я думаю, что крест может генерировать все возможные комбинации

 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

0 голосов
/ 15 сентября 2018

Вы можете использовать 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);

Здесь является тестером для этого решения.

EDIT:

Мне приходит в голову, что вы можете захотеть изменить длину 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;

Здесь - это скрипта SQL с этим решением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...