Mehrere Zeilen gruppieren und in Spalten zusammenfassen

Hallo,
ich bekomme als Ergebnis einer Abfrage mehrere Zeilen mit der selben Artikelnummer und pro Merkmal eine Zeile.

Abfrage:

SELECT        a_.Artikel, m_.Merkmal, m_.Auspr
FROM            PUB.S_Artikel a_, PUB.BS_Zuord m_
WHERE        a_.S_Artikel_Obj = m_.Owning_Obj AND (m_.Firma = '10') AND (m_.SMLeiste = 'Kataloge') AND (a_.Firma = '10') AND (a_.Artikel LIKE '545%')

Ergebnis meiner Abfrage:

Artikel Merkmal Auspr
54500105306 10 978
54500105306 20 97
54500105306 40 118
54500105306 50 1014
54500105306 60 957
54500105306 80 301
54500106300 40 119
54500205306 10 978
54500205306 20 97
54500205306 40 117
54500205306 50 1014
54500205306 60 957
54500205306 80 301
54500205306 30 334
54500206300 40 117
54500206300 30 334

als Ergebnis hätte ich gerne

Artikel M10 M20 M30 M40 M50 M60 M70 M80
54500105306 978 97 118 1014 957 301
54500106300 119
54500205306 978 97 334 117 1014 957 301
54500206300 334 117

Wie kann ich das machen?

Moin,

dafür kann SQL keine Lösung anbieten, weil das Ergebnis nicht normalisiert wäre. Geh mal zu MSO und such dort nach SQLLISTE.

Gruß
Ralf

Welcher SQL-Dialekt wird verwendet?

Hallo,
ich hole in Excel --> Microsoft Query Daten über die ODBC-Schnittstelle der Progress-Datenbank von ProAlpha

Hallo,
ich habe es so gelöst.
Kann ich das noch optimieren?

SELECT        a_.Artikel, m1_.Auspr AS M10, m2_.Auspr AS M40
FROM            PUB.S_Artikel a_, PUB.BS_Zuord m1_, PUB.BS_Zuord m2_
WHERE        a_.S_Artikel_Obj = m1_.Owning_Obj AND a_.S_Artikel_Obj = m2_.Owning_Obj AND (m1_.Firma = '10') AND (m1_.SMLeiste = 'Kataloge') AND (a_.Firma = '10') AND (a_.Artikel LIKE '545%') AND (m1_.Merkmal = '10') AND 
                         (m2_.Firma = '10') AND (m2_.SMLeiste = 'Kataloge') AND (m2_.Merkmal = '40')

Ergebnis:

Artikel M10 M40
54500105306 978 118
54500205306 978 117
54500305306 979 118
54500805306 983 125

Hallo,
das geht (eigentlich) ganz einfach mit PIVOT.

SELECT        a_.Artikel, m_.Merkmal,
FROM            PUB.S_Artikel a_, PUB.BS_Zuord m_
PIVOT (_aggregate_(m_.Auspr) FOR m_.Merkmal IN ([10],[20],[30],[40],[50],[60],[70],[80]) AS x;

Der Knackpunkt ist die Aggregatsfunktion. Microsoft hat kein GROUP_CONCAT, das sich hier anbieten würde. Ansonsten, falls m_.Auspr numerisch ist, kannst Du auch MIN oder MAX nehmen; dann fehlen Daten, falls zu einem Artikel und Merkmal mehrere Auspr vorhanden sind.