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

Откуда: ссылка в профиле
Сообщений: 337
Есть таблица:
idtxt
10десять
20двадцать
30тридцать
40сорок

Надо получить (сортировка неважна)
i1u1i2u2
20двадцать10десять
30тридцать10десять
20двадцать30тридцать
40сорок10десять
20двадцать40сорок
30тридцать40сорок

Здесь из пары
десять - двадцать
двадцать - десять
Надо оставить десять - двадцать или двадцать - десять (неважно)

Аналогично, из пары
тридцать - десять
десять - тридцать
оставляем или тридцать - десять или десять - тридцать.
Ну и т.д.

Работающий код:
declare @t table (id int, txt varchar(500))
insert @t values (10, 'десять'), (20,'двадцать'), (30,'тридцать'), (40,'сорок')
select * from @t

;with t as (
  select
  t1.id [i1], t1.txt [u1],
  t2.id [i2], t2.txt [u2],
  case when t1.id > t2.id then t1.id else t2.id end [c1],
  case when t1.id < t2.id then t1.id else t2.id end [c2] 
  from @t t1
  cross join @t t2
  where t1.id <> t2.id
)
select top 1 with ties
*
from t
order by row_number() over(partition by c1, c2 order by (select 0))

Может есть варианты попроще? В реальности данных будет немного...
9 июн 18, 16:25    [21482371]     Ответить | Цитировать Сообщить модератору
 Re: Запрос. Комбинации  [new]
Посетитель
Member

Откуда:
Сообщений: 1209
SQLPowerUser,
where t1.id< t2.id
9 июн 18, 16:35    [21482393]     Ответить | Цитировать Сообщить модератору
 Re: Запрос. Комбинации  [new]
SQLPowerUser
Member

Откуда: ссылка в профиле
Сообщений: 337
Посетитель,

точно! Спасибо!
9 июн 18, 16:46    [21482415]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить