2

可能重复:
转置 sql 结果,使一列进入多列

我想在我的 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 中可能吗?

4

2 回答 2

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

于 2012-10-29T19:06:28.157 回答
0

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

select
    year,
    us.price as us,
    uk.price as uk
from mytable us
left join mytable uk on us.year = uk.year
于 2012-10-29T19:06:41.300 回答