在PostgreSQL中将列数据转换为行

时间:2018-07-18 11:23:19

标签: sql postgresql unpivot

我的数据格式如下。

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..

我该怎么做?

3 个答案:

答案 0 :(得分:1)

您可以使用交叉联接在数据上创建“临时”标准化视图:

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

答案 1 :(得分:0)

一种简单的方法使用UNION

SELECT order_no, rate, 'jan' AS month, jan AS unit UNION ALL
SELECT order_no, rate, 'feb', feb UNION ALL
...
SELECT order_no, rate, 'dec', dec
ORDER BY order_no;

Postgres还具有CROSSTAB功能。但是要使用它,您必须非常擅长SQL,而我不是。

答案 2 :(得分:0)

尝试一下

import selenium
from selenium import webdriver

options = webdriver.ChromeOptions()
options.add_argument('--headless')

driver = webdriver.Chrome(chrome_options = options, executable_path = r'C:\Users\a\Selenium\chromedriver.exe')
driver.get('https://www.google.com')
driver.set_window_size(1920, 1080)
driver.save_screenshot('screenshot.png')