Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Генерация текстовой строки во всех сочeтаниях  [new]
michael R
Member

Откуда: из-за границы
Сообщений: 2113
SQL 2008
примерно такая таблица

declare @main table(id int primary key clustered, name char(2));
insert @main  values (1, 'A') , (2, 'B') , (3, 'C')  ;


как получить такие варианты
A,B,C
A,C,B
B,A,C
B,C,A
C,A,B
C,B,A

то есть своего рода факториал

спасибо
1 янв 14, 13:36    [15370633]     Ответить | Цитировать Сообщить модератору
 Re: Генерация текстовой строки во всех сочeтаниях  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31442
michael R
как получить такие варианты

select m1.name, m2.name, m3.name
from @main m1
	cross join @main m2	
	cross join @main m3
where m1.name <> m2.name
	and m2.name <> m3.name
	and m1.name <> m3.name
order by m1.name, m2.name, m3.name
1 янв 14, 13:44    [15370641]     Ответить | Цитировать Сообщить модератору
 Re: Генерация текстовой строки во всех сочeтаниях  [new]
michael R
Member

Откуда: из-за границы
Сообщений: 2113
alexeyvg
а если более динамически ?
3 значения это для примера
1 янв 14, 13:48    [15370646]     Ответить | Цитировать Сообщить модератору
 Re: Генерация текстовой строки во всех сочeтаниях  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31442
michael R
а если более динамически ?
Что такое "более динамически", расшифруйте термин.

По скольким полям нужно делать сочетания, столько и джойнов.
1 янв 14, 15:10    [15370750]     Ответить | Цитировать Сообщить модератору
 Re: Генерация текстовой строки во всех сочeтаниях  [new]
michael R
Member

Откуда: из-за границы
Сообщений: 2113
заранее количество не известно
поэтому и динамика нужна
предположительно до 10 слов
1 янв 14, 15:22    [15370765]     Ответить | Цитировать Сообщить модератору
 Re: Генерация текстовой строки во всех сочeтаниях  [new]
michael R
Member

Откуда: из-за границы
Сообщений: 2113
нее всё отбой
то что я думал это не решение
1 янв 14, 15:49    [15370800]     Ответить | Цитировать Сообщить модератору
 Re: Генерация текстовой строки во всех сочeтаниях  [new]
sdet
Member

Откуда:
Сообщений: 463
michael R,

Используйте cte
1 янв 14, 15:50    [15370803]     Ответить | Цитировать Сообщить модератору
 Re: Генерация текстовой строки во всех сочeтаниях  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31442
michael R
заранее количество не известно
поэтому и динамика нужна
предположительно до 10 слов
Чего "количество неизвестно", каких "слов"?

Слов (записей в таблице) может быть любое количество.

Если неизвестна структура таблицы, то во первых, можно построить запрос динамически, во вторых, непонятно, как будут формироваться условия, если они неизвестны?
sdet
michael R,

Используйте cte
Не, cte тут вообще ни при чём, у ТС неизвестна структура таблицы, и нужно, что бы сервер построил запрос, сам поняв структуру и придумав логику работы с ней.
1 янв 14, 17:00    [15370963]     Ответить | Цитировать Сообщить модератору
 Re: Генерация текстовой строки во всех сочeтаниях  [new]
sdet
Member

Откуда:
Сообщений: 463
alexeyvg
sdet
Используйте cte
Не, cte тут вообще ни при чём, у ТС неизвестна структура таблицы, и нужно, что бы сервер построил запрос, сам поняв структуру и придумав логику работы с ней.

Структура известна. Кол-во данных(сочетаний) неизвестно. В любом случае ТС уже не нужен какой-либо вариант
1 янв 14, 17:14    [15370991]     Ответить | Цитировать Сообщить модератору
 Re: Генерация текстовой строки во всех сочeтаниях  [new]
Гузы
Guest
sdet
...Кол-во данных(сочетаний) неизвестно...

Неожиданно, однако.
Слов скока известно, значит и скока сочетаний - тож.
С НГ!
1 янв 14, 21:15    [15371542]     Ответить | Цитировать Сообщить модератору
 Re: Генерация текстовой строки во всех сочeтаниях  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31442
sdet
Структура известна. Кол-во данных(сочетаний) неизвестно
А, точно, что то я напутал...
1 янв 14, 22:18    [15371689]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить