[MS SQL] Mehrere Spaltenwerte in eine Spalte zusammenfassen

PapaRusski

Grünschnabel
Guten Tag zusammen ich hab folgendes Problem und steh schon seit längerem aufm Schlauch.

Ich habe das Problem:
Durch eine Select abfrage bekomme ich diese Ergebniss

Produktnummer // Attribute // Wert
1000 // Farbe // Blau
1000 // Farbe // Gelb
1000 // Farbe // Rot
1001 // Eigenschaften // Schwer
1001 // Eigenschaften // Carbon
1002 // Eigenschaften // Schwer


sowas z.b. jetzt will ich daraus dies bekommen

1000 // Farbe // Blaue ; Gelb ; Rot
1001 // Eigenschaften // Schwer, Carbon
1002 // Eigenschaften // Schwer


Könntet ihr mir da paar Stichwörter sagen wie ich sowas realisieren kann?

Danke.
 

Yaslaw

n/a
Moderator
Was für eine DB ist es? Mit MySQL ist das einfach über GROUP_CONCAT() zu lösen
SQL:
SELECT
    produktnummer,
    attribute,
    GROUP_CONCAT(','. wert)
FROM
    my_table
GROUP BY
    produktnummer,
    attribute

Bei Oracle ists nicht so einfach
 
Zuletzt bearbeitet von einem Moderator:

PapaRusski

Grünschnabel
Danke für die schnelle Antwort, also ich arbeite mit dem Mircosoft SQL Server Management Studio, und es ist ein Mircosoft SQL Server 2008.
 

Thomas Darimont

Erfahrenes Mitglied
Hallo,

hier ein Beispiel für SQL Server (getestet unter SQL Server 2012 jedoch sollte das so auch in SQL Server 2008 Funktionieren)

Wie so oft bei solchen textuellen "Zeilenwerte-zu-Spaltenwerte" Operationen kann man sich hier der XML Funktionen der jeweiligen Datenbanken bedienen. Das ist zwar sicherlich nicht die effizienteste Methode aber für "kleinere" Datenmengen sollte der Overhead der XML Funktionen zu vernachlässigen sein. Hierzu sollte man Performance Messungen durchführen und ggf. eine andere Implementierung verwenden.

SQL:
with
input as (
	select 1000 as prod , 'Farbe' as attr, 'Blau' as value
	union all
	select 1000 as prod , 'Farbe' as attr,  'Gelb'  as value
	union all
	select 1000 as prod , 'Farbe' as attr, 'Rot'  as value
	union all
	select 1001 as prod , 'Eigenschaften' as attr, 'Schwer' as value 
	union all
	select 1001 as prod , 'Eigenschaften' as attr, 'Carbon' as value 
	union all
	select 1002 as prod , 'Eigenschaften' as attr,'Schwer' as value 
)
select 
   input.prod
 , stuff((select ', ' + i.value from input i where i.prod = input.prod and i.attr = 'Eigenschaften' for xml path('')),1 ,1 ,'') as Eigenschaften
 , stuff((select ', ' + i.value from input i where i.prod = input.prod and i.attr = 'Farbe' for xml path('')),1 ,1 ,'') as Farbe
from input
group by input.prod

Ausgabe:
Code:
prod	Eigenschaften	Farbe
1000	NULL            Blau, Gelb, Rot
1001	Schwer, Carbon  NULL
1002	Schwer	        NULL

Gruß Tom
 

Neue Beiträge