0
我使用簡單的內部聯接語句並將結果導入到CTE表中。我想從CTE中選擇不同的'ServiceId'。我有以下查詢如何在SQL中選擇多列時使用不同的列表
SELECT DISTINCT(ServicesId), ServiceNo, ServiceDate, DealerCode FROM CTE_Temp
假設在CTE中存在重複的ServiceId條目,那麼我只想選擇第一個條目並忽略其餘的部分。
我使用簡單的內部聯接語句並將結果導入到CTE表中。我想從CTE中選擇不同的'ServiceId'。我有以下查詢如何在SQL中選擇多列時使用不同的列表
SELECT DISTINCT(ServicesId), ServiceNo, ServiceDate, DealerCode FROM CTE_Temp
假設在CTE中存在重複的ServiceId條目,那麼我只想選擇第一個條目並忽略其餘的部分。
您可以使用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
定義「第一個」 - 表和視圖沒有任何固有的順序。如果您有特定的順序(基於某些列),則需要告訴我們(和SQL Server)您要使用的順序。 – 2015-02-11 07:13:01
DISTINCT不是列上的函數,它適用於整個選定行! 「select distinct(col1),col2」eq「select distinct col1,col2」eq「select distinct col1,(col2)」!!! – jarlh 2015-02-11 08:07:23