2017-09-25 81 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