对列转行,行转列一直不太理解,写个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
最后得到结果