2017-02-21 8 views
0

Не могли бы вы предложить, что такое ошибка в нижеследующем запросе? На самом деле я хочу удалить все дубликаты из вывода запроса выбора и извлечь только уникальные строки. Заранее спасибо.Удаление дубликатов из выбранного запроса вывода

select * 
from (
    select ROW_NUMBER() over (
      partition by Dep 
      , tariffkode 
      , LinkTariffType 
      , poliata 
      , poliatavia 
      , podiata 
      , podiatavia 
      , PreCarriage 
      , PortTerminalId 
      , Product 
      , RoutingOrder 
      , PrepaidCollect 
      , isnull(description, '') 
      , ScaleCalcCode 
      , isnull(scalefrom, 0) 
      , isnull(scaleto, 0) 
      , CurrencyCode 
      , Base order by LinkTariffType desc 
      ) Record 
     , * 
    from (
     select tn.LinkTariffType 
      , tn.Dep 
      , tn.POLIata 
      , tn.POLIatavia 
      , tn.PODIata 
      , tn.PODIatavia 
      , tn.CurrencyCode 
      , tn.LegalEntityID 
      , tn.Rate 
      , tn.Base 
      , tn.Minimum 
      , tn.NrDescription 
      , tn.Description 
      , tn.DateFrom 
      , tn.DateUntil 
      , tn.DateCreate 
      , tn.DateMod 
      , tn.ModName 
      , tn.Tariffkode 
      , tn.ExpiryDate 
      , tn.PClass 
      , tn.Maximum 
      , tn.RoutingOrder 
      , tn.TariffCompType 
      , tn.PrePaidCollect 
      , tn.Product 
      , tn.IsDeleted 
      , (
       select distinct Location_IATA 
       from Company 
       where Called = 'KARL KING' 
        and LegalEntityID = 1 
        and IsDeleted = 0 
       ) as PreCarriage 
      , tn.PortTerminalID 
      , tn.ScaleFrom 
      , tn.ScaleTo 
      , tn.ScaleCalcCode 
      , tn.Mandatory 
      , (
       select CompanyID 
       from PlaceOfReceipt 
       where warehouse = 'KARL KING' 
        and LegalEntityID = 1 
        and OfficeID = 13 
        and IsDeleted = 0 
       ) as WarehouseID 
      , tn.TariffRelID 
      , tn.FreeDescription 
      , 0 
      , tn.ShipCode 
      , tn.AgentID 
      , tn.ContainerTypeID 
      , tn.CommodityID 
      , 0 as TempTable 
     from TariffNew tn 
     inner join hhInvoiceLines inv 
      on tn.Tariffkode = inv.NrInvoiceLine 
     where (
       tn.PreCarriage is not null 
       and tn.PreCarriage != '' 
       ) 
      and (
       tn.POLIata is not null 
       and tn.POLIata != '' 
       ) 
      and inv.OfficeID = 13 
      and inv.IsDeleted = 0 
      and inv.LegalEntityID = 1 
      and tn.LegalEntityID = 1 
      and tn.Dep = 'E' 
      and tn.IsDeleted = 0 
      and tn.DateUntil = '2078-12-31 00:00:00' 
      and tn.Description = 'kgl' 
     ) 
    ) as b 
where b.Record = 1 
+2

Положить в Excel и нажать кнопку« Удалить дубликаты »? Никто не поможет вам после того, как вы сбросили на нас огромную неотформатированную стену текста. – DavidG

+0

SELECT DISTINCT? – Juan

+0

Я пробовал с отличным. но он не работает. – Che

ответ

1

Во-первых, вы должны определить, что вы хотите назвать «уникальными строками».

После того, как у вас есть набор столбцов, что определяет ряд уникален, то есть набор колонок, которые вы используете в partition by части row_number()

В коде ниже, раскомментировать набор столбцов, который определяет ваш «уникальный строки ":

select * 

    from (
    select ROW_NUMBER() over (
    partition by 
     Dep 
    --, tariffkode 
    --, LinkTariffType 
    --, poliata 
    --, poliatavia 
    --, podiata 
    --, podiatavia 
    --, PreCarriage 
    --, PortTerminalId 
    --, Product 
    --, RoutingOrder 
    --, PrepaidCollect 
    --, isnull(description, '') 
    --, ScaleCalcCode 
    --, isnull(scalefrom, 0) 
    --, isnull(scaleto, 0) 
    --, CurrencyCode 
    --, Base 
    order by LinkTariffType desc 
    ) Record 
    , * 

    from (
    select tn.LinkTariffType 
    , tn.Dep 
    , tn.POLIata 
    , tn.POLIatavia 
    , tn.PODIata 
    , tn.PODIatavia 
    , tn.CurrencyCode 
    , tn.LegalEntityID 
    , tn.Rate 
    , tn.Base 
    , tn.Minimum 
    , tn.NrDescription 
    , tn.Description 
    , tn.DateFrom 
    , tn.DateUntil 
    , tn.DateCreate 
    , tn.DateMod 
    , tn.ModName 
    , tn.Tariffkode 
    , tn.ExpiryDate 
    , tn.PClass 
    , tn.Maximum 
    , tn.RoutingOrder 
    , tn.TariffCompType 
    , tn.PrePaidCollect 
    , tn.Product 
    , tn.IsDeleted 
    , (
     select distinct Location_IATA 
     from Company 
     where Called = 'KARL KING' 
     and LegalEntityID = 1 
     and IsDeleted = 0 
    ) as PreCarriage 
    , tn.PortTerminalID 
    , tn.ScaleFrom 
    , tn.ScaleTo 
    , tn.ScaleCalcCode 
    , tn.Mandatory 
    , (
     select CompanyID 
     from PlaceOfReceipt 
     where warehouse = 'KARL KING' 
     and LegalEntityID = 1 
     and OfficeID = 13 
     and IsDeleted = 0 
    ) as WarehouseID 
    , tn.TariffRelID 
    , tn.FreeDescription 
    , 0 as UnnamedColumn 
    , tn.ShipCode 
    , tn.AgentID 
    , tn.ContainerTypeID 
    , tn.CommodityID 
    , 0 as TempTable 
    from TariffNew tn 
     inner join hhInvoiceLines inv on tn.Tariffkode = inv.NrInvoiceLine 
    where tn.PreCarriage is not null 
     and tn.PreCarriage != '' 
     and tn.POLIata is not null 
     and tn.POLIata != '' 
     and inv.OfficeID = 13 
     and inv.IsDeleted = 0 
     and inv.LegalEntityID = 1 
     and tn.LegalEntityID = 1 
     and tn.Dep = 'E' 
     and tn.IsDeleted = 0 
     and tn.DateUntil = '2078-12-31 00:00:00' 
     and tn.Description = 'kgl' 
    ) as s 
    ) as b 
    where b.Record = 1 
+0

спасибо за ответ. все еще получая ту же ошибку в строке, где записана инструкция «) как b, где b.Record = 1)». ошибка говорит о том, что «Неверный синтаксис близок». Ожидание AS, ID или QUOTED_ID ». Тем временем я нашел другой способ решить эту проблему. Я использовал CTE для хранения всех строк из запроса внутреннего выбора, а затем применил раздел к содержимому CTE. – Che

+0

@Che обновлен, чтобы попытаться исправить и другие ошибки – SqlZim

+0

спасибо большое !!! это сработало ..... :) – Che

Смежные вопросы