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%')
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')
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.