2012-12-14 1 views
0

다음은 내 쿼리입니다. 이 쿼리는 이미지에 아래 표시된 결과 집합을 반환합니다. Result Set 하지만 고유 한 행이 필요합니다. 고유 행을 어떻게 얻을 수 있습니까?Sql의 고유 한 행

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

Distinct by ContractId?

당신은 PARTITION BY ContractIdROW_NUMBER를 사용하여 각 그룹의 첫 선택할 수 있습니다 : 당신은 어떤 문제없이 CTE에 조인 추가 할 수 있습니다

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 

참고. 가독성을 높이기 위해 생략했습니다.

+0

어떻게 조인을 추가 할 수 있습니까? –

+0

@AbidAli : 항상 같은 식으로 : '... FROM Tbl_Contract C INNER JOIN Tbl_CountDetail ON ...'. –

+0

작성한이 쿼리를 설명해 주시겠습니까? CTE와는 무엇이며 어떤 역할을합니까? 및 쿼리에 사용 된 다른 모든 키워드. –