2016-02-15 3 views
0

Я ЗТБВО так:Удаление повторяющихся строк на основе одного столбца

Agenzia Codice Nome 
Globmaster 012 NORTHWEST AIRLINES 
Globmaster 020 LUFTHANSA CARGO 
Globmaster 023 FEDERAL EXPRESS 
Globmaster 024 EUROPEAN AIR EXPRESS EAE 
Globmaster 988 ASIANA 
Globmaster 994 LINEAS AEREAS AZTECA 
Globmaster 995 B & H AIRLINES 
Globmaster 997 BIMAN 
Gabbiano 012 NORTHWEST AIRLINES 
Gabbiano 020 LUFTHANSA CARGO 
Gabbiano 023 FEDERAL EXPRESS 
Gabbiano 400 PALESTINIAN AIRLINES 
Gabbiano 406 UPS AIRLINES 
Gabbiano 407 AIR SENEGAL INTERNATIONAL 

Мне нужно изменить запрос таким образом, что он не будет давать повторяющиеся коды (CODICE) в результате :

SELECT  'Gabbiano' AS Agenzia, Codice, Descrizione, FlBSP, MastroForn, CapocForn, ContoForn, SottocForn, CodIVANazAtt, CommNazAttiva, CommIntAttiva, 
         FlCancellato, DataUltModifica, IDUtente, IDTerminale, CodAnagrafico, NoteDirPortAnd, NoteDirPortRit, ImpDirPortPax, ImpDirPortVei, GGScad, 
         PathCondGen 
FROM   dbo.TVTV0000 
UNION 
SELECT  'Istantravel' AS Agenzia, Codice, Descrizione, FlBSP, MastroForn, CapocForn, ContoForn, SottocForn, CodIVANazAtt, CommNazAttiva, CommIntAttiva, 
         FlCancellato, DataUltModifica, IDUtente, IDTerminale, CodAnagrafico, NoteDirPortAnd, NoteDirPortRit, ImpDirPortPax, ImpDirPortVei, GGScad, 
         PathCondGen 
FROM   IstanTravel.dbo.TVTV0000 AS Statistiche_1 
UNION 
SELECT  TOP (100) PERCENT 'Globmaster' AS Agenzia, Codice, Descrizione, FlBSP, MastroForn, CapocForn, ContoForn, SottocForn, CodIVANazAtt, 
         CommNazAttiva, CommIntAttiva, FlCancellato, DataUltModifica, IDUtente, IDTerminale, CodAnagrafico, NoteDirPortAnd, NoteDirPortRit, ImpDirPortPax, 
         ImpDirPortVei, GGScad, PathCondGen 
FROM   Globmaster.dbo.TVTV0000 AS Statistiche_2 
ORDER BY Codice 

Я даже не знаю, почему я понимаю, что глупо TOP (100) ПРОЦЕНТ все равно;)

Edit:Она должна возвращать что-то вроде:

Agenzia Codice Nome 
Globmaster 012 NORTHWEST AIRLINES 
Globmaster 020 LUFTHANSA CARGO 
Globmaster 023 FEDERAL EXPRESS 
Globmaster 024 EUROPEAN AIR EXPRESS EAE 
Globmaster 988 ASIANA 
Globmaster 994 LINEAS AEREAS AZTECA 
Globmaster 995 B & H AIRLINES 
Globmaster 997 BIMAN 
Gabbiano 400 PALESTINIAN AIRLINES 
Gabbiano 406 UPS AIRLINES 
Gabbiano 407 AIR SENEGAL INTERNATIONAL 
+2

Итак, какой из них мы должны взять>? globmaster gabbiano или istantravel – sagi

+0

Не важно, какое агентство, важно то, что есть только строки с не дублирующимися кодами :) – Bass

ответ

0

TOP 100 PERCENT использовали, чтобы иметь возможность добавлять ORDER BY к источнику просмотра (чтобы избежать окончательного ORDER BY, который просто глупо).

Вы должны определить приоритет, который Agenzia должны быть перечислены первым:

SELECT Agenzia, Codice, Descrizione, FlBSP, MastroForn, CapocForn, ContoForn, 
     SottocForn, CodIVANazAtt, CommNazAttiva, CommIntAttiva, FlCancellato, DataUltModifica, 
     IDUtente, IDTerminale, CodAnagrafico, NoteDirPortAnd, NoteDirPortRit, ImpDirPortPax, 
     ImpDirPortVei, GGScad, PathCondGen 
FROM 
(SELECT *, 
     ROW_NUMBER() 
     OVER (PARTITION BY Codice 
      ORDER BY priorty) AS rn 
    FROM 
    (

     SELECT 1 AS priority, 'Gabbiano' AS Agenzia, Codice, Descrizione, FlBSP, MastroForn, CapocForn, ContoForn, 
       SottocForn, CodIVANazAtt, CommNazAttiva, CommIntAttiva, FlCancellato, DataUltModifica, 
       IDUtente, IDTerminale, CodAnagrafico, NoteDirPortAnd, NoteDirPortRit, ImpDirPortPax, 
       ImpDirPortVei, GGScad, PathCondGen 
     FROM dbo.TVTV0000 
     UNION ALL -- probably more efficient than UNION 
     SELECT 2 AS priority, 'Istantravel' AS Agenzia, Codice, Descrizione, FlBSP, MastroForn, CapocForn, ContoForn, 
       SottocForn, CodIVANazAtt, CommNazAttiva, CommIntAttiva, FlCancellato, DataUltModifica, 
       IDUtente, IDTerminale, CodAnagrafico, NoteDirPortAnd, NoteDirPortRit, ImpDirPortPax, 
       ImpDirPortVei, GGScad, PathCondGen 
     FROM IstanTravel.dbo.TVTV0000 AS Statistiche_1 
     UNION ALL 
     SELECT  3 AS priority, 'Globmaster' AS Agenzia, Codice, Descrizione, FlBSP, MastroForn, CapocForn, ContoForn, 
       SottocForn, CodIVANazAtt, CommNazAttiva, CommIntAttiva, FlCancellato, DataUltModifica, 
       IDUtente, IDTerminale, CodAnagrafico, NoteDirPortAnd, NoteDirPortRit, ImpDirPortPax, 
       ImpDirPortVei, GGScad, PathCondGen 
     FROM Globmaster.dbo.TVTV0000 AS Statistiche_2 
    ) AS dt 
) AS dt 
WHERE rn = 1 
+0

Over не поддерживается SQL Server 2005 :) – Bass

+0

@Bass: Конечно, поддерживается «ROW_NUMBER» в SQL Server 2005. На основе вашего редактирования вам просто нужно изменить «приоритет» соответственно. – dnoeth

+0

@Bass: Работает ли мой ответ? Если у вас нет какого-либо предпочтительного агентства, вы можете удалить «приоритет» и изменить «ROW_NUMBER»() OVER (PARTITION by Codice ORDER BY Codice) ' – dnoeth

0

Использование DISTINCT

SELECT DISTINCT Codice FROM Globmaster.dbo.TVTV0000 AS Statistiche_2 
ORDER BY Codice 
Смежные вопросы