对列转行,行转列一直不太理解,写个demo记下
现有一个需求,我想统计出每月中各个产品的销量,需要展示的结果是这样的
而数据库里的表却是这种
select * from tb_order
显然不能满足需求,这时候就需要行转列了
先把tb_order每一条数据用decode函数处理
select t.yf,decode(t.cp,'苹果',t.sl) 苹果销量,decode(t.cp,'橘子',t.sl) 橘子销量,
decode(t.cp,'香蕉',t.sl) 香蕉销量 from tb_order t
得到这样的结果
然后对它进行分组,合并相同的月份。而分组需要各个字段的值相同或唯一,这时候我们需要取表中的有效值用max处理
select t.yf ,max(decode(t.cp,'苹果',t.sl)) 苹果销量,max(decode(t.cp,'橘子',t.sl))
橘子销量,max(decode(t.cp,'香蕉',t.sl)) 香蕉销量 from tb_order t group by t.yf
最后得到结果
本文详细解析了如何使用SQL中的decode函数实现行转列,通过具体案例展示了如何将产品销量从多行数据转换为按月汇总的列式展示,适用于需要进行数据透视处理的场景。



1万+

被折叠的 条评论
为什么被折叠?



