Sql server 在SSIS中取消激发数据
我正在尝试使用SSI以以下格式规范化数据:Sql server 在SSIS中取消激发数据,sql-server,ssis,unpivot,Sql Server,Ssis,Unpivot,我正在尝试使用SSI以以下格式规范化数据: SerialNumber Date R01 R02 R03 R04 ------------------------------------------- 1 9/25/2011 9 6 1 2 1 9/26/2011 4 1 3 5 2 9/25/2011 7 3 2 1 2
SerialNumber Date R01 R02 R03 R04
-------------------------------------------
1 9/25/2011 9 6 1 2
1 9/26/2011 4 1 3 5
2 9/25/2011 7 3 2 1
2 9/26/2011 2 4 10 6
每个“R”列代表一小时的读数。R01是凌晨12:00,R02是凌晨1:00,R03是凌晨2:00,R04是凌晨3:00。我想转换数据并以这种格式将其存储在另一个表中(换行以便于阅读):
我在SSIS 2008包中使用unpivot转换来完成大部分工作,但我遇到的问题是根据我使用的值的列将小时添加到日期中。有没有办法在SSIS中实现这一点?请记住,这是大约3000万条记录的一小部分数据,因此性能是一个问题
谢谢你的帮助
SSIS
包并添加新的数据流任务
,然后配置此DFT(编辑…
)UNPIVOT
组件并对其进行配置:
数据转换组件:
临时结果:
派生列
组件:
对于NewData
derived列,可以使用以下表达式:DATEADD(“HOUR”(类型==“R01”?0:(类型==“R02”?1:(类型==“R03”?2:3))),Date)
<代码>«布尔表达式»?«when_true»:«when_false»运算符类似于IIF()
函数(来自VBA/VB),用于计算要添加的小时数:对于“R01”->0小时,“R02”->1小时,“R03”->2小时或其他3小时(对于“R04”)
结果:
SerialNumber Date Reading
-----------------------------------------
1 9/25/2011 12:00 AM 9
1 9/25/2011 1:00 AM 6
1 9/25/2011 2:00 AM 1
1 9/25/2011 3:00 AM 2
1 9/26/2011 12:00 AM 4
1 9/26/2011 1:00 AM 1
1 9/26/2011 2:00 AM 3
1 9/26/2011 3:00 AM 5
2 9/25/2011 12:00 AM 7
2 9/25/2011 1:00 AM 3
2 9/25/2011 2:00 AM 2
2 9/25/2011 3:00 AM 1
2 9/26/2011 12:00 AM 2
2 9/26/2011 1:00 AM 4
2 9/26/2011 2:00 AM 10
2 9/26/2011 3:00 AM 6