2016-03-08 121 views
0

我有一个像下面如何获得多个列中的第二高值,在SQL

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

我能写

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 

找到所有4个标志中最大的价值可能你的一些数据请帮我找到Flag1-Flag4内的第二大值?例如,Jason的第二大应flag2

谢谢你提前!

回答

0

您可以UNPIVOT那么你的数据进行查询,如下

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还可以通过这个查询得到的第一个量太大,看rn = 2

+0

明白了,感谢您的帮助! –

相关问题