我有以下格式的数据。

order_no    rate       jan        feb       mar     ....
 1           1200                  2         4
 2           1000      1                     5
 3           2400      14          3

现在我想转置这个表以获得以下输出。
order_no    rate       month     unit
 1           1200       feb       2
 1           1200       mar       4
 2           1000       jan       1
 2           2400       mar       5  and so on..

我该怎么做?

最佳答案

可以使用交叉连接在数据上创建“临时”规范化视图:

select o.order_no, o.rate, v.*
from orders o
  cross join lateral (
      values
        ('jan', jan),
        ('feb', feb),
        ('mar', mar),
        ...
        ('dec', dec)
  ) as v(month, unit)

如果要排除没有值的月份,可以添加
where v.unit is not null

到查询
在线示例:http://rextester.com/PBP46544

关于sql - 在PostgreSQL中将列数据转换为行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51400804/

10-11 11:54