0

以下は私のクエリです。このクエリは、以下の画像に示す次の結果セットを返しますが、結果セット 一意の行が必要です。どうすれば一意の行を取得できますか?

Select
     distinct (tbl_Contract.ContractID),
     Tbl_Contract.KeyWinCountNumber,
     Tbl_Contract.ContractNumber,
     Tbl_Contract.ContractDate,
     Tbl_CountryFrom.CountryFromName,
     Tbl_CountryTo.CountryToName,
     tbl_Port.PortName,
     Tbl_Contract.Vans,
     Tbl_Contract.ContractID,
     Tbl_Item.ItemName,
     Tbl_Brand.BrandName,
     Tbl_Seller.SellerName,
     Tbl_Count.CountName,
     Tbl_Buyer.BuyerName

     from Tbl_Contract

     inner join Tbl_CountDetail
     on
     Tbl_CountDetail.ContractId = Tbl_Contract.ContractID
     inner join Tbl_Item
     on
     Tbl_Contract.ItemID = Tbl_Item.ItemID
     inner join Tbl_Brand
     on
     Tbl_Brand.BrandID = Tbl_Contract.ContractID
     inner join Tbl_Count
     on
     Tbl_CountDetail.CountId = Tbl_Count.CountID
     inner join Tbl_Seller 
     on
     Tbl_Seller.SellerID = Tbl_Contract.SellerID
     inner join Tbl_Buyer
     on
     Tbl_Buyer.BuyerID = Tbl_Contract.BuyerID
     inner join Tbl_CountryFrom
     on
     Tbl_CountryFrom.CountryFromID = Tbl_Contract.CountryFromID
     inner join Tbl_CountryTo
     on
     Tbl_CountryTo.CountryToID = Tbl_Contract.CountryToID
     inner join tbl_Port
     on
     tbl_Port.PortID = Tbl_Contract.PortID
4

1 に答える 1

4

ContractId?によって異なる

各グループの最初のものだけを使用ROW_NUMBERして選択できます。PARTITION BY ContractId

WITH CTE AS
(
    SELECT C.*,
      ROW_NUMBER() OVER (PARTITION BY ContractId Order By ContractDate DESC)AS RN
    FROM Tbl_Contract C
)
SELECT * FROM CTE WHERE RN = 1

cte に結合を問題なく追加できることに注意してください。読みやすくするためにそれらを省略しました。

于 2012-12-14T08:26:39.163 に答える