Удалить дубликаты источника до места назначения (например, для 2 разных записей (строк), от Дели до Мумбаи и от Мумбаи до Дели, вывод должен быть один) - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть таблица в базе данных сервера sql.

Source     Destination     Fare
-------------------------------
Delhi      Mumbai           100
Mumbai     Delhi            100
London     New York         500

Мне нужно написать запрос sql, который выдаст следующий результат.

Source     Destination     Fare
-------------------------------
Delhi      Mumbai           100
London     New York         500

, если вы поменяете местами Source и Destination исовпадения с любой предыдущей строкой, затем удалите ее.

Ответы [ 4 ]

0 голосов
/ 05 февраля 2019

вы можете использовать объединение и сравнение

with cte as    
(
select 'Delhi' as source, 'Mumbai' as destination, 100 as fare
union all
select 'Mumbai' as source, 'Delhi' as destination, 100 as fare
union all
select 'London','New York',500
)   select  source,destination,fare from cte
    where source<destination
    union
    select  source,destination,fare        
    from cte where source<destination

выход

source  destination     fare
Delhi   Mumbai          100
London  New York        500
0 голосов
/ 05 февраля 2019

Другой вариант имеет дело с дубликатами, сортируя источники и места назначения:

WITH cte AS (
    SELECT
        CASE WHEN Source < Destination THEN Source ELSE Destination END AS Source,
        CASE WHEN Source < Destination THEN Destination ELSE Source END AS Destination,
        Fare
    FROM yourTable
)

SELECT DISTINCT Source, Destination, Fare
FROM cte;
0 голосов
/ 05 февраля 2019

Пожалуйста, попробуйте запрос:

select min(Source), max(Destination), Fare 
from 
    tbl 
where Source in (select Destination from tbl) 
group by Fare
union all
select * from 
    tbl 
where Source not in (select Destination from tbl)
0 голосов
/ 05 февраля 2019

Один метод использует union all и not exists:

select source, destination, fare
from t
where source < destination
union all
select source, destination, fare
from t
where source > destination and
      not exists (select 1
                  from t t2
                  where t2.source = t.destination and t2.destination = t.source
                 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...