2017-09-22 5 views
0

Ursprünglich habe ich eine SQL-Tabelle Server wie unten:SQL Server: konvertieren Zeilen in Spalten ohne Dreh und Gruppierungs

Result Type Type Order Type Value 
-------------------------------------- 
KM1 Color 1    Blue 
KM1 Shape 2    Square 
KM1 Size  3    10 
KM3 Color 1    Blue 
KM3 Shape 2    Square 
KM3 Size  3    10 
KM2 Color 1    Red 
KM2 Shape 2    Round 
KM2 Size  3    20 
KM2 Color 1    Blue 
KM2 Shape 2    Square 
KM2 Size  3    10 
KM2 Color 1    Blue 
KM2 Shape 2    Round 
KM2 Size  3    10 

und mein erwartetes Ergebnis wie

Color Shape Size Result 
------------------------------------- 
Blue Square 10  KM1, KM3, KM2 
Red  Round 20  KM2 
Blue Round 10  KM2 

Könnte dies geschehen sein sollte? Ich glaube nicht, dass der Drehpunkt helfen wird, da ich dasselbe Ergebnis für die Mehrfachkombination von Werten habe.

+0

Der Titel könnte auf dem vorgeschlagenen Duplikat gleich gewesen sein. Die Frage ist sehr unterschiedlich. –

Antwort

2

Dies ist zwei Aggregationsebenen. Die erste besteht darin, jedes Ergebnis zu beschreiben. Die zweite besteht darin, die Schlüssel zusammen zu bekommen. Also:

with t as (
     select result, 
      max(case when type = 'Color' then value end) as color, 
      max(case when type = 'Size' then value end) as size, 
      max(case when type = 'Shape' then value end) as shape 
     from t 
     group by result 
    ) 
select color, size, shape, 
     stuff((select ',' + t2.result 
       from t t2 
       where t2.color = t.color and t2.size = t.size and t2.shape = t.shape 
       for xml path ('') 
      ), 1, 1, '') as keys 
from (select distinct color, size, shape 
     from t 
    ) t; 
+0

Vielen Dank. Kann das dynamisch gemacht werden? Wie die Titelfarbe, Größe, Form kann für anderes Ergebnis wie Farbe, Breite, Höhe variieren. Wie kann in diesem Fall umgehen? –

+0

@GopalB. . . Ich würde vorschlagen, dass Sie Google "Dynamic Pivot SQL Server". –

Verwandte Themen