-1

このように、上位5人の従業員から3つの最高給与すべてを取得しようとします

    salary
  35000
  34000
  20000
  12000
  500
  40000
  25000
  41000
  90000
  550000

クエリ

select top 5
  (SELECT MAX(grosssalary) FROM Detail) maxsalary ,
   (SELECT MAX(grosssalary) FROM Detail) sec_max_salary,
  (SELECT MAX(grosssalary) FROM Detail
  WHERE grosssalary NOT IN (SELECT MAX(grosssalary) FROM Detail )) as third_max_salary

しかし、これはこのようなデータを示しています

maxsalary   sec_max_salary  third_max_salary
550000       550000            41000

このようなデータが必要な場合

   maxsalary    sec_max_salary  third_max_salary
    550000       90000            41000
4

10 に答える 10

1
 CREATE TABLE #A
 (

 salary INT
 )
 INSERT INTO #A VALUES
  (35000),
  (34000),
  (20000),
  (12000),
  (500  ),
  (40000),
  (25000),
  (41000),
  (90000),
  (550000)


select [1] maxsalary, [2] sec_max_salary, [3] third_max_salary
from (
SELECT *
FROM (

    SELECT *,
           RN = ROW_NUMBER() OVER (ORDER BY Salary DESC)
    FROM #A
)a
WHERE RN  <= 3

) src
pivot
(
  MAX(SALARY)
  for RN in ([1], [2], [3])
) piv;

出力

maxsalary   sec_max_salary  third_max_salary
550000       90000           41000
于 2016-12-05T06:08:04.670 に答える
0

を使用DENSE_RANK()して給与を並べ替え、CASE式を使用して上位 3 つの給与を検索します。

クエリ

;with cte as(
    select [sal_rank] = dense_rank() over(
        order by [grosssalary] desc
    ), *
    from [your_table_name]
)
select max(case [sal_rank] when 1 then [grosssalary] end) as [maxsalary],
max(case [sal_rank] when 2 then [grosssalary] end) as [sec_max_salary],
max(case [sal_rank] when 3 then [grosssalary] end) as [third_max_salary]
from cte;
于 2016-12-05T06:07:33.167 に答える
0

使用している場合は、使用しSQL SERVER 2012+ますOFFSET

SELECT TOP 1 salary,
             (SELECT salary FROM Yourtable
              ORDER  BY salary DESC OFFSET 1 ROWS FETCH NEXT 1 ROWS ONLY),
             (SELECT salary FROM Yourtable 
              ORDER  BY salary DESC OFFSET 2 ROWS FETCH NEXT 1 ROWS ONLY)
FROM   Yourtable
ORDER  BY salary DESC 

3番目に高い給与だけが必要な場合

SELECT salary
FROM   yourtable
ORDER  BY salary DESC 
OFFSET 2 ROWS FETCH NEXT 1 ROWS ONLY
于 2016-12-05T06:22:42.597 に答える
-2
select * 
from 
( select *
  from table 
  order by salary desc
  limit 3 
) as top_three
order by top_three.salary asc
limit 1
于 2016-12-05T06:38:52.770 に答える