我试图在第五个到第十个之间得到记录。 我使用下面的查询在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。
我试图在第五个到第十个之间得到记录。 我使用下面的查询在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。
不能引用列别名在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
这是否真的适用于列名称中的空格吗? “名字”和“姓氏”是否需要方括号?医学博士 – MatSnow
可以使用RANK函数一样, : -
RANK () OVER ([ partition_by_clause ] order_by_clause)
更多参考检查此链接: - https://docs.microsoft.com/en-us/sql/t-sql/functions/rank-transact-sql
。 Khairul Basar你为什么不喜欢我的帖子?我的帖子中的任何问题 – kannu
首先,可能@MD。 Khairul Basar并不是给你一个-1的人,他更新了你的回答,从你的代码中删除不需要的空格。然后,你的问题被降低了,因为几乎只有一个链接的问题被认为是低质量的,你只是放置链接并从文档中复制参数,你没有解释任何东西。最后,那个*没有解决问题,他对RANK()没有问题,但是列别名看到最多的答案。 –
我没有downvote! –
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
请注意,“OFFSET/FETCH”不考虑排名值;即如果您有多个排名在1-4中的任何位置,这些将包括在内。此外,如果您有5到10之间的倍数,则不会检索所有这些数字。 更好地把你的查询在一个子选择,并从该选择'WHERE Rnk之间5和10'作为蒂姆在下面说 – SQLBadPanda