'Pivot' ohne Transact-SQL

Hallo,

ich habe mir hier schon die Zähne ausgebissen an dem Versuch die Zeilen in Spalten abzubilden.

Meine Ausgangstabelle sieht folgendermaßen aus:

ID … FK … NAME … VALUE
A01_B01 … A01 … Auto … Rot
A01_B02 … A01 … LKW … NULL
A01_B03 … A01 … Reifen … Winter
A02_B01 … A02 … Auto … Grau
A02_B02 … A02 … LKW … 40t

Was ich jetzt versuchen möchte, ist die Ausprägungen für Auto und LKW in Spalten zu überführen, so dass das Ergebnis folgendermaßen aussieht:

FK … Auto … LKW
A01 … Rot … NULL
A02 … Grau … 40t

Bei meinem SQL-Statement werden unerwünschter Weise immer die Zeilen doppelt aufgeführt. Ich schaffe es also nicht, dass die beiden Ausprägungen für LKW und Auto in einer Zeile auftauchen.

FK … Auto … LKW
A01 … Rot … NULL
A01 … NULL … NULL
A02 … Grau … NULL
A02 … NULL … 40t

Hier mein zugrundeliegendes SQL-Statement:

SELECT FK, ‚Auto‘ =
CASE NAME WHEN ‚Auto‘ THEN VALUE ELSE NULL END,
‚LKW‘ =
CASE NAME WHEN ‚LKW‘ THEN VALUE ELSE NULL END
FROM tablexyz
WHERE NAME IN (‚Auto‘,‚LKW‘)

Hat jemand eine Idee wie ich zu meinem gewünschten Ergebnis komme?

Für Eure Ideen schon mal vielen Dank im Voraus.

Gruß Jonas

Hallo,

Was ich jetzt versuchen möchte, ist die Ausprägungen für Auto
und LKW in Spalten zu überführen, so dass das Ergebnis
folgendermaßen aussieht:

FK … Auto … LKW
A01 … Rot … NULL
A02 … Grau … 40t

Bei meinem SQL-Statement werden unerwünschter Weise immer die
Zeilen doppelt aufgeführt. Ich schaffe es also nicht, dass die
beiden Ausprägungen für LKW und Auto in einer Zeile
auftauchen.

FK … Auto … LKW
A01 … Rot … NULL
A01 … NULL … NULL
A02 … Grau … NULL
A02 … NULL … 40t

Hier mein zugrundeliegendes SQL-Statement:

SELECT FK, ‚Auto‘ =
CASE NAME WHEN ‚Auto‘ THEN VALUE ELSE NULL END,
‚LKW‘ =
CASE NAME WHEN ‚LKW‘ THEN VALUE ELSE NULL END
FROM tablexyz
WHERE NAME IN (‚Auto‘,‚LKW‘)

Hat jemand eine Idee wie ich zu meinem gewünschten Ergebnis
komme?

Für Eure Ideen schon mal vielen Dank im Voraus.

Gruß Jonas

Hi Jonas,

ganz klar dass dein Ansatz nicht funktionieren kann, da du mit deinem CASE von einer Tabellenzeile „verlangst“, dass sie zuerst Auto, und dann LKW oder alternativ NULL ist. Da aber eine Zeile nur immer einen Wert haben kann wirst du immer mehr Zeilen als gewünscht erhalten.

Join doch einfach doppelt über die Tabelle, Verknüpfung via fk, das ganze müsste dann so in der Art aussehen

SELECT pkw.fk „FK“, pkw.k_value „Auto“, lkw.k_value „Lkw“
FROM tabelle pkw, tabelle lkw
WHERE pkw.fk = lkw.fk
AND pkw.k_name = ‚Auto‘
AND lkw.k_name = ‚Lkw‘