2017-02-21 23 views
0

誰でも以下のクエリでエラーが発生していることをお勧めしますか?実際には、すべての重複をselectクエリ出力から削除し、一意の行だけを取り出したいとします。前もって感謝します。選択したクエリ出力から重複を削除する

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

まず、「一意の行」と呼ぶものを定義する必要があります。

あなたが行が一意であると判断列のセットを持っていたら、それはあなたが以下のコードではrow_number()

partition by一部に使用する列のセットで、あなたの「ユニークを定義する列セットのコメントを解除行 ":

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.Record = 1である行に同じエラーが表示されます。エラーは、 "近くの構文が間違っています"と表示されます。AS、IDまたはQUOTED_IDを予期しています。私はこの問題を解決する別の方法を見つけました。私は内側の選択クエリからすべての行を格納するためにCTEを使用して、その後、CTEの内容にパーティションを適用しました。 – Che

+0

@Cheはあなたの他のエラーを修正しようと更新しました – SqlZim

+0

ありがとうございました!!!それは..... .....働いた – Che

関連する問題