2017-09-25 31 views
-2

我试图在第五个到第十个之间得到记录。 我使用下面的查询在SQL Server如何在SQL Server中使用rank函数

PLZ让我正确

SELECT ID, 
     code, 
     first name, 
     last name, 
     RANK() OVER(ORDER BY code) AS rk 
FROM tbl_em_employees 
WHERE rk BETWEEN 5 AND 10; 

它给我的错误

无效RK。

+0

请注意,“OFFSET/FETCH”不考虑排名值;即如果您有多个排名在1-4中的任何位置,这些将包括在内。此外,如果您有5到10之间的倍数,则不会检索所有这些数字。 更好地把你的查询在一个子选择,并从该选择'WHERE Rnk之间5和10'作为蒂姆在下面说 – SQLBadPanda

回答

4

不能引用列别名在WHERE,所以你必须使用一个子查询或公用表表达式(CTE):

WITH CTE AS 
(
    Select ID, code, first name, last name, 
     rank() over (order by code) as rk 
    from tbl_em_employees 
) 
SELECT ID, code, first name, last name 
FROM CTE 
WHERE rk between 5 and 10 
+0

这是否真的适用于列名称中的空格吗? “名字”和“姓氏”是否需要方括号?医学博士 – MatSnow

-1

可以使用RANK函数一样, : -

RANK () OVER ([ partition_by_clause ] order_by_clause) 

更多参考检查此链接: - https://docs.microsoft.com/en-us/sql/t-sql/functions/rank-transact-sql

+0

。 Khairul Basar你为什么不喜欢我的帖子?我的帖子中的任何问题 – kannu

+1

首先,可能@MD。 Khairul Basar并不是给你一个-1的人,他更新了你的回答,从你的代码中删除不需要的空格。然后,你的问题被降低了,因为几乎只有一个链接的问题被认为是低质量的,你只是放置链接并从文档中复制参数,你没有解释任何东西。最后,那个*没有解决问题,他对RANK()没有问题,但是列别名看到最多的答案。 –

+0

我没有downvote! –

0
SELECT ID, code, first name, last name FROM 
(
    Select ID, code, first name, last name, 
     rank() over (order by code) as rk 
    from tbl_em_employees 
) 

WHERE rk between 5 and 10 
相关问题