Попробуйте CTE - общее табличное выражение:
WITH Salaries AS
(
SELECT
SalaryAmount, ROW_NUMBER() OVER(ORDER BY SalaryAmount DESC) AS 'RowNum'
FROM
dbo.SalaryTable
)
SELECT
SalaryAmount
FROM
Salaries
WHERE
RowNum <= 5
Получает 5 лучших зарплат в порядке убывания - вы можете поиграть со значением RowNumn
и получить любой фрагмент из списка зарплат.
В SQL Server также доступны другие функции ранжирования , которые также могут использоваться - например, есть NTILE
, который разделит ваши результаты на n групп одинакового размера (как можно ближе), так что вы можете, например, создайте 10 групп, подобных этой:
WITH Salaries AS
(
SELECT
SalaryAmount, NTILE(10) OVER(ORDER BY SalaryAmount DESC) AS 'NTile'
FROM
dbo.SalaryTable
)
SELECT
SalaryAmount
FROM
Salaries
WHERE
NTile = 1
Это разделит вашу зарплату на 10 групп одинакового размера, а группа с NTile=1
будет группой «ТОП 10%».