背景
在数据是,有时我们需要根据一定主键,将某个有固定分类的字段作为列名展开,将多行数据转成列数据,也就是实现行转列的效果。下面我们ETL行转列功能和SQL输入两种方式实现。
实操案例
像这样一个5个字段9行的数据表。其中项目字段是有多个固定分类的。
部门 | SKU | 月份 | 项目 | 值 |
运营五部 | HHHH001 | 202012 | 目标单价 | 112 |
运营五部 | HHHH001 | 202012 | 目标日销 | 212 |
运营五部 | HHHH001 | 202012 | 目标转化 | 312 |
运营五部 | HHHH001 | 202011 | 目标单价 | 111 |
运营五部 | HHHH001 | 202011 | 目标日销 | 211 |
运营五部 | HHHH001 | 202011 | 目标转化 | 311 |
运营五部 | HHHH001 | 202010 | 目标单价 | 110 |
运营五部 | HHHH001 | 202010 | 目标日销 | 210 |
运营五部 | HHHH001 | 202010 | 目标转化 | 310 |
我们希望把项目和项目对应的值转成列,也就是转换成这样的效果。
部门 | SKU | 月份 | 目标单价 | 目标日销 | 目标转化 |
运营五部 | HHHH001 | 202011 | 111 | 211 | 311 |
运营五部 | HHHH001 | 202012 | 112 | 212 | 312 |
运营五部 | HHHH001 | 202010 | 110 | 210 | 310 |
方法一:
直接使用ETL添加行转列操作。
①选择操作列和填充列
案例中我们要将项目和值两个字段对应的行转成列,项目是转换后的列名,值是新列中填充的数据
②选择值的聚合类型
③添加主键
④新建列
新建列也就是设置新的列名和原始行的值之间的对应关系,如果不变也可以直接勾选上新建列的名称同原始行的值。
方法二:
通过SQL处理
PIVOT(SUM(`[新列中填充的值]`)FOR `[需要转换的列]` in ('[转换的列名]','[转换的列名]'......))
使用pivot函数,多个列名用英文逗号隔开。
最后得到的结果