SQL:从不同的列值sql获取不同的行值

时间:2019-12-04 15:13:36

标签: sql

我正在尝试计算过去4个月的运行平均值。所以我需要获取每个月的第4个值

month_date | col_1 | Col_2 | Col_3| Col_4
---------------------------------------------
 11   |   0    |   0     |   0    |   0
 10   |   2    |   0     |   0    |   0
 09   |   3    |   4     |   0    |   0
 08   |   8    |   7     |   9    |   0
 07   |   6    |   8     |   11   |   5
 06   |   3    |   4     |   0    |   8
 05   |   8    |   7     |   9    |   9
 04   |   6    |   8     |   11   |   5

[预期输出]

 | Col_1 | Col_2 | Col_3| Col_4
----------------------------------------
  |   6     |   4     |   9    |   5

我试图做的事情

  • 我尝试对排除零位进行排名 像row_number超过(按月度顺序排序)-无效

-我试图使用无效的NULLS LAST函数,因为我需要根据月份而不是每月进行订购

请帮助

1 个答案:

答案 0 :(得分:0)

Unpivot使事情变得简单:

dbfiddle

select *
  from (
    select c, val
      from t unpivot (val for c in (col1 as 1, col2 as 2, col3 as 3, col4 as 4))
      where month_date + c = 4 + (select min(month_date) from t) ) 
  pivot (max(val) for c in (1 m1, 2 m2, 3 m3, 4 m4))