可能重复:
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中是否可行?
答案 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
答案 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