SQL Server中的类似QUALIFY的函数

时间:2015-04-28 11:05:28

标签: sql-server sql-server-2008

我的表格有两列:Emp_NameEmp_NR

可能会发生一个Emp_Name值有2个不同的Emp_NR值。

我想创建一个SELECT语句,该语句只能获得Emp_NameEmp_NR

的单个值

声明应该类似于Teradata:

SELECT 
    Emp_Name,
    Emp_NR
FROM Table
QUALIFY Row_Number OVER (PARTITION BY Emp_Name ORDER BY Emp__NR DESC) = 1

除此之外,我希望获得分配给特定Emp_NR的最高Emp_Name

2 个答案:

答案 0 :(得分:4)

你做的一切都很正确。

SELECT Emp_NR, Emp_Name
FROM (
    SELECT ROW_NUMBER() OVER (PARTITION BY Emp_Name ORDER BY Emp_NR DESC) AS RN, Emp_Name, Emp_NR
    FROM YourTable
    ) AS T
WHERE T.RN = 1;

这是正确的语法。

答案 1 :(得分:1)

另一种方法是将ORDER BYTOP 1 WITH TIES结合使用:

SELECT TOP 1 WITH TIES Emp_Name, Emp_NR
FROM Table
ORDER BY ROW_NUMBER() OVER (PARTITION BY Emp_Name ORDER BY Emp_NR DESC);

性能可能比使用子查询的解决方案稍差。