T-SQL. Выборка уникальных значений по двум полям
Всем привет! Есть таблица вида
| From | To |
|---|---|
| Moscow | SPB |
| SPB | Moscow |
| Tomsk | Bryansk |
| Tomsk | Pskov |
| Bryansk | Tomsk |
Мне нужно выбрать все уникальные значения в обе стороны (поле Moscow => SPB равно SPB => Moscow), т.е. чтобы на выходе получился такой результат:
| From | To |
|---|---|
| Moscow | SPB |
| Tomsk | Bryansk |
| Tomsk | Pskov |
Помогите, пожалуйста, 2-й день бьюсь. Пробовал так:
select *
from
(
select distinct ROW_NUMBER() OVER(PARTITION BY t2.[From], t2.[To]
ORDER BY t2.id) rn, t1.[From], t1.[To]
from table t1
join table t2 on t2.[from] = t1.[To]
and t2.[To]=t1.[From]
) t
where rn = 2
Ответы (1 шт):
Автор решения: i-one
→ Ссылка
Можно так:
DECLARE @table TABLE ([From] nvarchar(50), [To] nvarchar(50));
INSERT INTO @table
VALUES
(N'Moscow', N'SPB'),
(N'SPB', N'Moscow'),
(N'Tomsk', N'Bryansk'),
(N'Tomsk', N'Pskov'),
(N'Bryansk', N'Tomsk');
WITH TwoWay AS (
SELECT [From], [To]
FROM @table
UNION
SELECT [To], [From]
FROM @table
),
OneWay AS (
SELECT [From], [To]
FROM TwoWay
WHERE [From] < [To]
)
SELECT *
FROM OneWay;