You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SSIS中拆分列并按Area分组生成多列Balance数据?

使用SSIS实现行转列(拆分Days列展示对应Balance)

需求说明

原输入表结构:

AreaDaysBalance
Area 1351000
Area 2351000
Area 3351000
Area 1604000
Area 2604000
Area 3604000

目标输出表结构:

Area35D60D
Area 110004000
Area 210004000
Area 310004000

下面提供两种实现方法,其中包含你提到的Derived Column方案:


方法一:Derived Column + Aggregate 组合实现

1. 添加Derived Column转换

在数据流任务中,连接数据源后拖入Derived Column组件,打开编辑器:

  • 创建派生列35D,表达式写为:[Days] == 35 ? [Balance] : NULL(DT_I4)
    (如果Balance是小数类型,将DT_I4替换为对应的数据类型,比如DT_DECIMAL)
  • 创建派生列60D,表达式写为:[Days] == 60 ? [Balance] : NULL(DT_I4)
    这一步的作用是将对应Days的Balance值保留,其余行设为NULL。

2. 添加Aggregate转换

拖入Aggregate组件连接Derived Column的输出,打开编辑器:

  • 将Area列的操作设为Group By,作为分组依据
  • 对35D和60D列,选择Max(或Min)聚合函数,聚合会自动忽略NULL值,提取每个Area对应的有效Balance值。

3. 映射目标表

将Aggregate组件的输出连接到目标数据源,完成列映射即可生成目标结构。


方法二:使用Pivot转换(更高效直接)

如果Days的取值是固定的(仅35、60),用Pivot转换可以一步完成转置:

1. 添加Pivot转换

连接数据源后拖入Pivot组件,打开编辑器:

  • Pivot Key:选择Days(要转换为列的字段)
  • Set Key:选择Balance(要聚合的字段)
  • Pivot Value:点击「New」,输入列名35D,对应Pivot Key值35;再创建60D,对应值60,聚合函数选择Max(或Min)
  • Group By:选择Area作为分组列

2. 映射目标表

将Pivot组件的输出连接到目标表,完成列映射即可得到目标结果。


内容的提问来源于stack exchange,提问作者Jack Wheatley

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 12:57:52