如何在SQL中的多列中获得第二高的值

时间:2016-03-08 21:01:29

标签: sql-server tsql

我有一些数据如下

    Name     Flag1   Flag2  Flag3  Flag4
    Jason    500     400    200    100
    Mark     400     299    250    183
    Tom      932     331    283    844

我能够通过编写

找到所有4个标志中的最大值
Max = CASE WHEN flag1>flag2 AND flag1>flag3 AND flag1>flag4 THEN 'flag1' 
           WHEN flag1<flag2 AND flag2>flag3 AND flag2>flag4 THEN 'flag2'
           WHEN flag1<flag3 AND flag2<flag3 AND flag3>flag4 THEN 'flag3'
           WHEN flag1<flag4 AND flag2<flag4 AND flag3<flag4 THEN 'flag4'END

你能帮我找到Flag1-Flag4中的第二大值吗?例如,Jason的第二大应该是flag2

提前谢谢!

1 个答案:

答案 0 :(得分:0)

您可以取消隐藏数据,然后按以下方式进行查询

SELECT name,flags,flag FROM (
    SELECT ROW_NUMBER() OVER(PARTITION BY name ORDER BY flag DESC) rn,*
    FROM
    (
        SELECT name, flag, flags
        FROM
        (
          SELECT 'json' name, 500 flag1,400  flag2,200 flag3, 100 flag4
          UNION ALL
          SELECT 'Mark' name, 400 flag1,299  flag2,250 flag3, 183 flag4
          UNION ALL
          SELECT 'Tom' name, 932 flag1,331  flag2,283 flag3, 844 flag4
        ) AS cp
        UNPIVOT 
        (
          flag FOR flags IN (flag1, flag2, flag3, flag4)
        ) AS up
    )x
)y
WHERE rn=2

Result

P.S。在查询的中间,我只用一堆选择和联合所有

来模拟你的数据

p,s此外,您也可以通过此查询获得第一笔金额,请查看rn = 2