Comment returnner plusieurs lignes tout en pivotant la table dans sqlserver

Ceci est ma requête ci-dessous dans mssql

declare @cars as table ( owners tinyint, atsortingbute varchar(20), value varchar(20) ) insert into @cars(owners, atsortingbute, value) values (1, 'Make', 'VW'), (1, 'Model', 'Rabbit'), (1, 'Color', 'Gold'), (1, 'Make', 'V'), (1, 'Model', 'Rabbi'), (1, 'Color', 'Goldddd'), (2, 'Make', 'Jeep'), (2, 'Model', 'Wrangler'), (2, 'Color', 'Gray') select * from @cars select pvt.owners, pvt.Make, pvt.Model, pvt.Color from @cars c pivot ( min(value) for atsortingbute in ([Make],[Model],[Color]) ) pvt 

Au-dessus des returns

Les propriétaires font la couleur du model

  1 v rabbi gold 2 jeep wrangler gray 

mais j'ai besoin de revenir comme

Les propriétaires font la couleur du model

  1 v rabbi gold 1 vw rabbit golddd 2 jeep wrangler gray how is possible? 

Vous devez append un champ supplémentaire à vos données pour atsortingbuer à chaque combinaison propriétaire / atsortingbut une valeur unique:

 SELECT pvt.owners, pvt.Make, pvt.Model, pvt.Color FROM ( SELECT Owners, Atsortingbute, Value, RowNum = ROW_NUMBER() OVER(PARTITION BY Owners, Atsortingbute ORDER BY Value) FROM @Cars ) c PIVOT ( MIN(Value) FOR Atsortingbute IN ([Make], [Model], [Color]) ) pvt ORDER BY Owners, Make, Model, Color; 

La key ici est plutôt que de simplement passer @cars au pivot, la sous-requête ajoute une colonne supplémentaire pour faire pivoter la table:

 Owners Atsortingbute Value RowNum 1 Color Gold 1 1 Color Goldddd 2 1 Make V 1 1 Make VW 2 1 Model Rabbi 1 1 Model Rabbit 2 2 Color Gray 1 2 Make Jeep 1 2 Model Wrangler 1 

Donc, maintenant il y a une colonne supplémentaire pour différencier Gold de Goldddd par exemple, en les forçant sur des lignes différentes dans la sortie du pivot.

Vous rencontrerez des problèmes mais s'il n'y a pas de doublon pour tous les attributes, où il y a des données manquantes vous (1, 'Color', 'Goldddd') avec NULL, par exemple si vous deviez supprimer les valeurs (1, 'Color', 'Goldddd') de votre données, alors la sortie serait:

 owners Make Model Color 1 V Rabbi Gold 1 VW Rabbit NULL 2 Jeep Wrangler Gray 

Exemple sur SQL Fiddle