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 
相关问题