2010-08-09 129 views
5

我收到必須加載到規範化表中的非規範化文本文件。將非規範化文件中的數據加載到規範化表中

規格化表:

客戶id - 類別 - 類別2 - 類別3 - 類別4
1 - A - 乙 - C - d

當該歸一化,它應看起來像:

客戶id - 類別
1 - 甲
1 - B
1 - Visual C
1 - d

編寫T-SQL語句以實現此目標的最佳方式是什麼(SQL Server 2008)?

+0

我會用一種編程語言遍歷併爲每一行做4次插入..但這對我來說很舒服。 – Fosco 2010-08-09 17:17:55

+0

或者爲每個類別使用一個INSERT查詢。 – 2010-08-09 17:21:18

回答

6

使用UNPIVOT關鍵字:http://technet.microsoft.com/en-us/library/ms177410.aspx

當然你要替換[文件]帶有某種OPENROWSET查詢,或者使用導入/導出嚮導將數據獲取到一個臨時表。

SELECT CustomerId, Category 
FROM 
(
    SELECT CustomerId, Category, Category2, Category3, Category4 
    FROM [File] 

) tblDenormalized 
UNPIVOT 
(
    Category FOR Column IN 
    (Category, Category2, Category3, Category4) 
) AS unpivot; 
+0

完美...謝謝! – Sesame 2010-08-09 18:34:33