2013-02-26 98 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