行转列sql整理

测试表三个字段:月份,类型,数据

方法一:

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;

猜你喜欢

转载自www.cnblogs.com/123windy123/p/11573961.html