跳到主要内容
版本:5.9.0

ETL中两种方式实现行转列

背景

在数据是,有时我们需要根据一定主键,将某个有固定分类的字段作为列名展开,将多行数据转成列数据,也就是实现行转列的效果。下面我们ETL行转列功能和SQL输入两种方式实现。

实操案例

原始数据

像这样一个5个字段9行的数据表。其中项目字段是有多个固定分类的。

部门SKU月份项目
运营五部HHHH001202012目标单价112
运营五部HHHH001202012目标日销212
运营五部HHHH001202012目标转化312
运营五部HHHH001202011目标单价111
运营五部HHHH001202011目标日销211
运营五部HHHH001202011目标转化311
运营五部HHHH001202010目标单价110
运营五部HHHH001202010目标日销210
运营五部HHHH001202010目标转化310

期望效果

部门SKU月份目标单价目标日销目标转化
运营五部HHHH001202011111211311
运营五部HHHH001202012112212312
运营五部HHHH001202010110210310

解决方案

方法一:直接使用ETL添加行转列操作。

image.png

  1. 选择操作列和填充列

案例中我们要将项目和值两个字段对应的行转成列,项目是转换后的列名,值是新列中填充的数据

image.png

  1. 选择值的聚合类型

image.png

  1. 添加主键

image.png

  1. 新建列

新建列也就是设置新的列名和原始行的值之间的对应关系,如果不变也可以直接勾选上新建列的名称同原始行的值。

image.png

方法二:通过SQL处理

image.png

  1. 使用pivot函数,多个列名用英文逗号隔开。

PIVOT(SUM(`[新列中填充的值]`)FOR `[需要转换的列]` in ('[转换的列名]','[转换的列名]'......))

image.png

  1. 最后得到的结果

image.png