测试表三个字段:月份,类型,数据
方法一:
select t."月份",
sum(case when t."类型"='蒸发量' then t."数据" else 0 end) as "蒸发量",
sum(case when t."类型"='降水量' then t."数据" else 0 end) as "降水量",
sum(case when t."类型"='温度' then t."数据" else 0 end) as "温度"
from CESHIBIAO t
group by t."月份"
方法二:(与上面一样只是用了不同的函数)
--decode(行专列,将多行的值改为多列显示)(decode的那个column,是某个列的值,也就是将某个列的值作为新的列的column,MAX聚集函数也可以用sum、min、avg等其他聚集函数替代)
select t."月份",
sum("DECODE"(t."类型",'蒸发量',t."数据",0)) as "蒸发量",
sum("DECODE"(t."类型",'降水量',t."数据",0)) as "降水量",
sum("DECODE"(t."类型",'温度',t."数据",0)) as "温度"
from CESHIBIAO t
group by t."月份"
方法三:pivot orcale11g以后
--pivot(行专列,将多行的值改为多列显示)(for in的那个column,是某个列的值,也就是将某个列的值作为新的列的column,这个column下边的值好像只能来自一列)
select * from (
select "月份","数据","类型" from ADMIN_CESHIBIAO)
pivot(
sum("数据") for "类型" in ('蒸发量','降水量','温度')
)
方法四:listagg(没有查)
--listagg(合并多行的值为字符串,只用一列来显示)
列转行
方法一:
select wm_concat("月份") name from ADMIN_CESHIBIAO;
方法二:把逗号替换“|”
select replace(wm_concat("月份"),',','|') name from ADMIN_CESHIBIAO;