0

我使用簡單的內部聯接語句並將結果導入到CTE表中。我想從CTE中選擇不同的'ServiceId'。我有以下查詢如何在SQL中選擇多列時使用不同的列表

SELECT DISTINCT(ServicesId), ServiceNo, ServiceDate, DealerCode FROM CTE_Temp 

假設在CTE中存在重複的ServiceId條目,那麼我只想選擇第一個條目並忽略其餘的部分。

+4

定義「第一個」 - 表和視圖沒有任何固有的順序。如果您有特定的順序(基於某些列),則需要告訴我們(和SQL Server)您要使用的順序。 – 2015-02-11 07:13:01

+1

DISTINCT不是列上的函數,它適用於整個選定行! 「select distinct(col1),col2」eq「select distinct col1,col2」eq「select distinct col1,(col2)」!!! – jarlh 2015-02-11 08:07:23

回答

1

您可以使用ROW_NUMBER() OVER()。只需更換ORDER BY中的列來定義第一個。

;WITH AnotherCTE AS(
    SELECT 
     ServicesId, ServiceNo, ServiceDate, DealerCode, 
     RN = ROW_NUMBER() OVER(PARTITION BY ServicesID ORDER BY ServiceDate DESC) 
    FROM CTE_Temp 
) 
SELECT 
    ServicesId, ServiceNo, ServiceDate, DealerCode 
FROM AnotherCTE 
WHERE RN = 1 
相關問題