2010-11-16 7 views
2

Dans SQL Server 2008, j'ai une table avec des colonnes suivantes et les donnéesConvertir les valeurs des colonnes dans plusieurs enregistrements

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

Je veux faire une nouvelle table ou changer tableau ci-dessus avec les données présentées comme

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 

Merci

+0

ce qui est la clé primaire? – MLT

+0

Bonjour, j'ai une question similaire pour la situation inverse. J'apprécierais que vous puissiez répondre. – user219628

Répondre

3

ou en utilisant 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

Merci beaucoup! Merci beaucoup – user219628

+0

Bonjour, j'ai une question similaire pour la situation opposée. J'apprécierais si vous pouvez répondre http://stackoverflow.com/questions/4256441/convert-multiple-records-into-once-column – user219628

1

Pas exactement ma réponse la plus élégante, mais je pense que ça va encore travailler

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: A quelques secondes d'avoir tapé la même réponse. – GendoIkari

1

Vous pouvez être intéressé par 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; 
Questions connexes