Sql server SSIS ETL Unpivot到T-SQL Unpivot的转换

Sql server SSIS ETL Unpivot到T-SQL Unpivot的转换,sql-server,tsql,ssis,etl,unpivot,Sql Server,Tsql,Ssis,Etl,Unpivot,我正在尝试将一些SSIS ETL转换为sql Server代码。旧的ETl是为2005年编写的,新的T-SQL代码是为2012年编写的。我在SSIS ETL中转换了以下数据: 来源表:资产名称、MoodyRating、SPRating、FitchRating 源数据: FirstAsset, 1 , 2 , 3 SecondAsset, 4, 5, 6 FirstAsset, Moody, 1 FirstAsset, SP, 2 FirstAsset, Fitch, 3 SecondAsset

我正在尝试将一些SSIS ETL转换为sql Server代码。旧的ETl是为2005年编写的,新的T-SQL代码是为2012年编写的。我在SSIS ETL中转换了以下数据:

来源表:资产名称、MoodyRating、SPRating、FitchRating

源数据:

FirstAsset, 1 , 2 , 3
SecondAsset, 4, 5, 6
FirstAsset, Moody, 1
FirstAsset, SP, 2
FirstAsset, Fitch, 3
SecondAsset, Moody, 4
SecondAsset, SP, 5
SecondAsset, Fitch, 6
将被取消加载到以下位置:

目标表:资产名称、评级来源、评级价值

目标数据:

FirstAsset, 1 , 2 , 3
SecondAsset, 4, 5, 6
FirstAsset, Moody, 1
FirstAsset, SP, 2
FirstAsset, Fitch, 3
SecondAsset, Moody, 4
SecondAsset, SP, 5
SecondAsset, Fitch, 6

我想我可以在SQL中使用UNPIVOT命令来实现这一点,但是我找不到一个例子可以将RatingSource作为UNPIVOT过程的一部分来注入。任何帮助都将不胜感激。

您可以使用
UNPIVOT
功能,然后只需替换列名中的
rating

select AssetName,
  replace(RatingSouce, 'Rating', '') RatingSouce,
  RatingValue
from yourtable
unpivot
(
  RatingValue
  for RatingSouce in ([MoodyRating], [SPRating], [FitchRating])
) unpiv

请参见您可以使用
UNPIVOT
功能,然后只需替换列名中的
评级

select AssetName,
  replace(RatingSouce, 'Rating', '') RatingSouce,
  RatingValue
from yourtable
unpivot
(
  RatingValue
  for RatingSouce in ([MoodyRating], [SPRating], [FitchRating])
) unpiv

请参见

谢谢您的示例。这正是我要找的。在我的实际案例中,我需要一个case语句而不是replace来更好地表示我正在转换的数据,但事实就是如此。@JookyDFW是的,您可以使用
case
来完成此操作,我只是使用
replace
来演示如何完成此操作。:)谢谢你的例子。这正是我要找的。在我的实际案例中,我需要一个case语句而不是replace来更好地表示我正在转换的数据,但事实就是如此。@JookyDFW是的,您可以使用
case
来完成此操作,我只是使用
replace
来演示如何完成此操作。:)