Azure Data Factory中按GroupID动态创建列合并数据
行转列(Pivot)实现方案
针对你的需求,核心是实现行转列(Pivot):按name分组后,根据charge的取值将amount映射到对应列。你用window aggregate未得到正确结果,大概率是没结合条件聚合来筛选对应charge的数值。
核心实现逻辑
对每个目标列(如chargeXX、chargeYY),用条件判断匹配对应的charge值,提取对应的amount。由于每个name+charge组合仅一条数据,用MAX()或MIN()聚合函数即可精准拿到对应值(单值聚合不影响结果)。
示例SQL实现
如果用SQL处理,代码如下:
SELECT name, MAX(CASE WHEN charge = 'chargeXX' THEN amount END) AS chargeXX, MAX(CASE WHEN charge = 'chargeYY' THEN amount END) AS chargeYY FROM your_table GROUP BY name;
将your_table替换为你的实际表名,执行后即可得到目标宽表结构。
针对Window Aggregate Flowlet的调整
若必须使用window aggregate组件:
- 窗口键设为
name,按name分组 - 为每个目标列添加条件聚合计算:
- 计算
chargeXX列时,设置过滤条件为charge = 'chargeXX',聚合函数选择MAX(amount)(或MIN(amount)) - 计算
chargeYY列时,设置过滤条件为charge = 'chargeYY',同样使用MAX(amount)
- 计算
- 最后按
name去重,保留每组唯一行
这样就能确保每个name对应一行,且chargeXX、chargeYY列正确填充对应amount值。
内容的提问来源于stack exchange,提问作者Julian
相关产品推荐
相关产品推荐

