2012-04-13 79 views

回答

2

如果你想獲得前5名不同的工資(不論相同金額可能有多少次出現),您需要使用DENSE_RANK()排名功能和CTE來實現這一目標:

DECLARE @salaries TABLE (salary DECIMAL(18,4)) 

INSERT INTO @salaries VALUES(5000) 
INSERT INTO @salaries VALUES(5000) 
INSERT INTO @salaries VALUES(4500) 
INSERT INTO @salaries VALUES(4500) 
INSERT INTO @salaries VALUES(3000) 
INSERT INTO @salaries VALUES(2000) 
INSERT INTO @salaries VALUES(1000) 
INSERT INTO @salaries VALUES(500) 
INSERT INTO @salaries VALUES(400) 

;WITH SalariesRanked AS 
(
    SELECT 
     Salary, 
     SalaryNumber = DENSE_RANK() OVER(ORDER BY Salary DESC) 
    FROM  
     @salaries 
) 
SELECT salary 
FROM SalariesRanked 
WHERE SalaryNumber <= 5 

這導致輸出這樣的:

salary 
5000.0000 
5000.0000 
4500.0000 
4500.0000 
3000.0000 
2000.0000 
1000.0000 
3
SELECT TOP 5 salary FROM your_table 
ORDER BY salary DESC 
+1

我相信OP希望獲得前5名(不同)工資金額 - 無論每個工資金額出現多少次。至少這就是他在中間的編輯似乎表明...... – 2012-04-13 11:33:46

+0

@marc_s:當OP張貼他的問題(正如你所看到的)我的回答是正確的... – Marco 2012-04-13 11:37:36

+0

第一篇文章:是的。但是OP在編輯#4中改變了他的問題以表明目前的情況。 – 2012-04-13 11:38:24

1
select salary 
from 
    (
    select salary, 
      dense_rank() over(order by salary desc) as rn 
    from YourTable 
) as T 
where rn <= 5 

嘗試在SE-Data

0
SELECT TOP 5 Salary 
FROM [Table] 
GROUP BY Salary 
ORDER BY Salary DESC 

您需要組查詢,以避免重複小號alaries。