Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Создание перестановок  [new]
ЯЯЯЯЯЯЯ
Guest
Есть у меня таблица, там только поле Name. И например строки вида

AAA
BBB
CCC

Мне нужно сгенерировать перестановки вида AAABBB, AAACCC, BBBCCC, AAABBBCCC. При этом перестановки вида AAABBB и BBBAAA являются одинаковыми и нужно сгенерить только AAABBB (вторую BBBAAA генерировать не нужно). Как такое сделать на SQL и сколько будет вариантов (можно ли посчитать сразу)?
25 июл 13, 22:55    [14618977]     Ответить | Цитировать Сообщить модератору
 Re: Создание перестановок  [new]
qwerty112
Guest
declare @t table (name varchar(20))

insert into @t
select 'AAA' union all
select 'BBB' union all
select 'CCC'

;with cte as
(
select cast(name as varchar(max)) as name, name as last_name, 1 as lev
from @t

union all

select cte.name+t.name, t.name, lev+1 
from @t t inner join cte on cte.last_name<t.name
)

select * from cte

namelast_namelev
AAAAAA1
BBBBBB1
CCCCCC1
BBBCCCCCC2
AAABBBBBB2
AAACCCCCC2
AAABBBCCCCCC3
25 июл 13, 23:16    [14619048]     Ответить | Цитировать Сообщить модератору
 Re: Создание перестановок  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
ЯЯЯЯЯЯЯ
Есть у меня таблица, там только поле Name. И например строки вида

AAA
BBB
CCC

Мне нужно сгенерировать перестановки вида AAABBB, AAACCC, BBBCCC, AAABBBCCC. При этом перестановки вида AAABBB и BBBAAA являются одинаковыми и нужно сгенерить только AAABBB (вторую BBBAAA генерировать не нужно). Как такое сделать на SQL и сколько будет вариантов (можно ли посчитать сразу)?

Только называется это не Перестановки, а Сочетание. Как посчитать количество, есть формула:
http://ru.wikipedia.org/wiki/Сочетание
26 июл 13, 20:24    [14624635]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить