Verschachtelte Abfrage

JohnWorks

Benutzer
Beiträge
5
Hallo Zusammen,

ich habe eine Frage noch einer performance-orientierten Abfrage.

Tabellenstruktur sieht wie folgt aus:
> Jobdaten: Nr; Kunde; Bezeichnung; Preis
Bsp:
1, Musterkunde, TestBez, 16.99
2, Musterkunde, Lala, 9.99

> JobdatenDetails: NR; Detail; Value
Bsp:
1, Farbe, Rot
1, Name, Max
1, Datum, 01.01.2017
2, Farbe, Gelb
2, Name, Tom
2, Datum, 01.01.2014

Ich möchte eine Anfrage erstellen die nachfolgendes Ergebnis liefert:
>AbfrageErgebnis: Jobdaten: Nr; Kunde; Bezeichnung; Preis; Farbe; Name; Datum
Bsp:
1, Musterkunde, TestBez, 16.99, Rot, Max,01.01.2017
2, Musterkunde, Lala, 9.99, Gelb, Tom, 01.01.2014

Wenn ich da ganze per Join mache. Habe ich es bisher immer nur hinbekommen einen Wert von JobdatenDetails darzustellen (bspw. Farbe). Ich bräuchte im Prinzip einen pivot von der Tabelle JobdatenDetails. Vielleicht hat ja jemand einen Tipp für mich.

Lieben Dank,
John
 
Werbung:
Du kannst Deine Jobdaten-Detailtabelle mehrfach joinen, Demo:

Code:
test=*# select * from job;
 id | name
----+------
  1 | max
  2 | anna
(2 Zeilen)

test=*# select * from detail ;
 j | detail |  value   
---+--------+----------
 1 | farbe  | rot
 1 | name  | Max
 1 | Datum  | 1.1.2017
 2 | farbe  | gelb
 2 | name  | Tom
 2 | Datum  | 1.1.2014
(6 Zeilen)

test=*# select * from job j left join detail f on (f.j,f.detail)=(j.id,'farbe') left join detail n on (n.j,n.detail)=(j.id,'name') left join detail d on (d.j,d.detail)=(j.id,'Datum');
 id | name | j | detail | value | j | detail | value | j | detail |  value   
----+------+---+--------+-------+---+--------+-------+---+--------+----------
  1 | max  | 1 | farbe  | rot  | 1 | name  | Max  | 1 | Datum  | 1.1.2017
  2 | anna | 2 | farbe  | gelb  | 2 | name  | Tom  | 2 | Datum  | 1.1.2014
(2 Zeilen)
 
Du brauchst einfach nur mehr Joins mit Alias:
Code:
SELECT j.*,d1.value AS farbe,d2.value AS [name],d3.value AS datum
FROM jobdaten j
LEFT JOIN jobdatendetails d1
ON j.nr = d1.nr
AND d1.detail = 'Farbe'
LEFT JOIN jobdatendetails d2
ON j.nr = d2.nr
AND d2.detail = 'Name'
LEFT JOIN jobdatendetails d3
ON j.nr = d1.nr
AND d3.detail = 'Datum'
 
Vielen Dank für die Antwort mit den Joins.

Das funktioniert nur, wenn bei den JobdatenDetails immer die selbe Reihenfolge in den Parametern vorhanden ist (Farbe, Name, Datum, Farbe, Name, Datum, Farbe, Name, Datum, ...).
 
Werbung:
Zurück
Oben