如何在PostgreSQL中转置列和行(即,如何切换行和列)?

时间:2012-10-29 18:59:14

标签: sql postgresql pivot

  

可能重复:
  Transposing an sql result so that one column goes onto multiple columns

我想在我的PSQL数据库中进行一种行/列交换。这是我的示例数据库:

id  place   price   year
1   U.S.    80  2000
2   U.S.    60  2001
3   U.S.    40  2002    
4   U.K.    600 2000
5   U.K.    500 2001
6   U.K.    350 2002

我想将该表转换为以下示例:

year    U.S.    U.K.
2000    80  600
2001    60  500
2002    40  350

这在PostgreSQL中是否可行?

2 个答案:

答案 0 :(得分:8)

您可以使用聚合函数和CASE语句轻松完成此操作:

select year,
  sum(case when place = 'U.S.' then price else 0 end) "U.S.",
  sum(case when place = 'U.K.' then price else 0 end) "U.K."
from yourtable
group by year

请参阅SQL Fiddle with Demo

答案 1 :(得分:0)

这被称为“pivot”,并且postgres中没有特殊语法来支持它 - 你必须使用SQL对其进行编码,例如:

select
    year,
    us.price as us,
    uk.price as uk
from mytable us
left join mytable uk on us.year = uk.year