2010-11-16 68 views
2

在SQL Server 2008中,我有一個表與下面的列和數據轉換列中的值到多個記錄

Date Name Colors Color1 Color2 Color3 
Nov01 John Red 
Nov02 Mike Green Blue Grey 
Nov03 Melissa Yellow Orange 
Nov10 Rita Pink Red 

我想做出新的表或顯示爲

Date Name Colors 
Nov01 John Red 
Nov02 Mike Green 
Nov02 Mike Blue 
Nov02 Mike Grey 
Nov03 Melissa Yellow 
Nov03 Melissa Orange 
Nov10 Rita Pink 
Nov10 Rita Red 
數據更改上面的表格

謝謝

+0

什麼是主鍵? – MLT 2010-11-16 17:23:30

+0

你好,我有類似的問題,相反的情況。如果您能回覆,我將不勝感激。 – user219628 2010-11-23 13:24:51

回答

3

或者使用PIVOT & UNPIVOT

SELECT t.Date, 
     unpvt.Name, 
     unpvt.Color 
FROM 
    (SELECT Name, Colors, Color1, Color2, Color3 
    FROM dbo.MYTABLE) p 
UNPIVOT 
    (Color FOR [Date] IN 
     (Colors, Color1, Color2, Color3) 
)AS unpvt 
Join dbo.MYTABLE t on t.[Name] = unpvt.[Name] 
Where unpvt.Color != '' 
+0

謝謝大師!非常感謝 – user219628 2010-11-16 19:13:06

+0

你好,我有類似的問題,相反的情況。我將不勝感激,如果你能迴應 http://stackoverflow.com/questions/4256441/convert-multiple-records-into-once-column – user219628 2010-11-23 13:26:35

1

不完全是我最優雅的答案,但我認爲它仍然會工作

Select Date, Name, Colors as Colors 
Where Colors is not null 
Union All 
Select Date, Name, Color1 as Colors 
Where Color1 is not null 
Union All 
Select Date, Name, Color2 as Colors 
Where Color2 is not null 
Union All 
Select Date, Name, Color3 as Colors 
Where Color3 is not null 
+0

+ 1:距離輸入相同的答案只有幾秒鐘的距離。 – GendoIkari 2010-11-16 17:25:35

1

您可能感興趣的UNPIVOT

SELECT [Date], [Name], [Colors] 
FROM 
    (SELECT [Date], [Name], [Color1], [Color2], [Color3] 
    FROM myColors) p 
UNPIVOT 
    ([Colors] FOR x IN 
     ([Color1], [Color2], [Color3]) 
) AS unpvt;