2013-02-26 47 views
1

我试图将一些SSIS ETL转换为SQL Server代码。老ETL是2005年写的和新的T-SQL代码正在为2012年,我有以下数据正在SSIS ETL转化写着:SSIS ETL Unpivot转换为T-SQL Unpivot

源表: ASSETNAME,MoodyRating,SPRating,FitchRating

源数据:

FirstAsset, 1 , 2 , 3 
SecondAsset, 4, 5, 6 

正在被未枢转,以执行以下操作:

目标表: ASSETNAME,RatingSouce,RatingValue

目标数据:

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

我想我可以使用UNPIVOT命令在SQL做到这一点,但我不能找到将注入RatingSource作为的一部分的例子不透明的过程。任何帮助,将不胜感激。

回答

4

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

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

SQL Fiddle with Demo

+0

感谢您的例子。这正是我所期待的。在我的实际情况下,我需要一个case语句,而不是替换,以更好地表示我正在转换的数据,但就是这样。 – 2013-02-26 17:21:41

+0

@JookyDFW是的,你可以使用'case'来做到这一点,我只是用'replace'来展示它是如何完成的。 :) – Taryn 2013-02-26 17:25:02