Tente um CTE - Expressão de tabela comum:
WITH Salaries AS
(
SELECT
SalaryAmount, ROW_NUMBER() OVER(ORDER BY SalaryAmount DESC) AS 'RowNum'
FROM
dbo.SalaryTable
)
SELECT
SalaryAmount
FROM
Salaries
WHERE
RowNum <= 5
Isso obtém os 5 principais salários em ordem decrescente - você pode jogar com o
RowNumn
valor e basicamente recuperar qualquer fatia da lista de salários. Existem outras funções de classificação disponível no SQL Server que também pode ser usado - por exemplo, há
NTILE
que dividirá seus resultados em n grupos de tamanho igual (o mais próximo possível), para que você possa, por exemplo, crie 10 grupos assim:WITH Salaries AS
(
SELECT
SalaryAmount, NTILE(10) OVER(ORDER BY SalaryAmount DESC) AS 'NTile'
FROM
dbo.SalaryTable
)
SELECT
SalaryAmount
FROM
Salaries
WHERE
NTile = 1
Isso dividirá seus salários em 10 grupos de tamanho igual - e aquele com
NTile=1
é o grupo de salários "TOP 10%".