SQLITE - Zeilen richtig in Spalten umwandeln
Ich habe eine Datenbank mit einer Tabelle für die Produktreihenfolge:
order_id | prod_code | prod_color | size | quantity |
-----------------------------------------------------
1 SHIRT 001 S 10
1 SHIRT 001 M 7
1 SHIRT 001 L 8
1 SHIRT 001 XL 1
1 SHIRT 995 S 2
1 SHIRT 995 M 1
1 SHIRT 995 L 0
1 SHIRT 995 XL 1
2 PANTS ....
und eine Produktpreistabelle wie diese:
prod_code | prod_color | price | currency
-----------------------------------------
SHIRT 001 10 EUR
SHIRT 001 9 USD
SHIRT 001 50 YEN
SHIRT 001 15 RUB
SHIRT 995 20 EUR
SHIRT 995 29 USD
SHIRT 995 100 YEN
SHIRT 995 45 RUB
PANTS ....
Was ich gerne bekommen würde, ist eine Ansicht wie diese (der Einfachheit halber gefiltert nach order_id):
order_id | prod_code | prod_color | size | quantity | EUR | USD | YEN | RUB
---------------------------------------------------------------------------
1 SHIRT 001 S 10 10 9 50 15
1 SHIRT 001 M 7 10 9 50 15
1 SHIRT 001 L 8 10 9 50 15
1 SHIRT 001 XL 1 10 9 50 15
1 SHIRT 995 S 2 20 29 100 45
1 SHIRT 995 M 1 20 29 100 45
1 SHIRT 995 L 0 20 29 100 45
1 SHIRT 995 XL 1 20 29 100 45
Ich habe bereits im Internet und in SO nachgesehen und gefundenDIESE FRAGE das zeigt mir genau was ich tun muss, aber ich denke mit ein paar modifikationen ...
Ich habe versucht, diese Abfrage in der Datenbank auszuführen:
SELECT o.order_id, o.prod_code, o.prod_color, o.size, o.quantity,
MAX(CASE WHEN p.currency = 'EUR' THEN p.price END) AS 'EUR',
MAX(CASE WHEN p.currency = 'USD' THEN p.price END) AS 'USD',
MAX(CASE WHEN p.currency = 'YEN' THEN p.price END) AS 'YEN',
MAX(CASE WHEN p.currency = 'RUB' THEN p.price END) AS 'RUB'
FROM products_order o JOIN products_prices p ON o.prod_code = p.prod_code
WHERE o.order_id = 1
GROUP BY o.order_id, o.prod_code, o.prod_color, o.size, o.quantity
In den Preisspalten wird für jede Zeile der in der gesamten Spalte gefundene MAX-Wert zurückgegeben: Sowohl für [product_color = 001] als auch für [product_color = 995] habe ich einen Preis von 20 EURO (wenn es für 001 nur billiger ist) 10 euro!)
Ich habe es auch ohne MAX versucht, aber es gibt mir eine Zeile für jeden Preis, so dass viele Zellen leer sind (dann habe ich verstanden, wofür MAX verwendet wird: D).
Kennen Sie eine Möglichkeit, das zu tun, was ich versuche? Wie kann ich MAX in einer einzelnen prod_color statt in jeder prod_color verwenden?
Ich hoffe, Sie können verstehen, was ich geschrieben habe, danke im Voraus, jede Hilfe wird geschätzt.
(Wenn Sie etwas genauer erklären möchten, fragen Sie einfach und ich werde so schnell wie möglich antworten.
Nochmals vielen Dank, viele Grüße