从选择查询输出中删除重复项

时间:2017-02-21 11:54:04

标签: sql sql-server tsql select duplicates

有人可以建议以下查询中的错误是什么?实际上我想从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

1 个答案:

答案 0 :(得分:1)

首先,您必须定义要称为“唯一行”的内容。

如果您拥有确定行唯一的列集,那么您在partition by的{​​{1}}部分中使用的列集就是

在下面的代码中,取消注释定义“唯一行”的列集:

row_number()