SQLITE - prawidłowa transpozycja wierszy do kolumn
Mam bazę danych zawierającą tabelę takich zamówień:
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 ....
oraz tabela cen produktów w następujący sposób:
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 ....
chciałbym uzyskać taki widok (dla uproszczenia filtrowany przez id_porządku):
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
Przejrzałem już sieć i SO, i znalazłemTO PYTANIE to pokazuje mi dokładnie, co muszę zrobić, ale myślę, że z pewnymi modyfikacjami ...
Próbowałem uruchomić to zapytanie w bazie danych:
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
powróci w kolumnach z cenami, dla każdego wiersza, wartość MAX znaleziona w całej kolumnie: zarówno dla [product_color = 001], jak i dla [product_color = 995] mam cenę równą 20 EURO (gdy dla 001 jest tańszy, tylko 10 euro!)
Próbowałem również bez MAX, ale daje mi jeden wiersz za każdą cenę, pozostawiając wiele pustych komórek (wtedy zrozumiałem, jaki MAX jest używany dla: D).
Czy wiesz, jak robić to, co próbuję zrobić? Jak mogę użyć MAX zamiast jednego prod_color zamiast każdego prod_color?
Mam nadzieję, że zrozumiesz to, co napisałem, z góry dzięki, każda pomoc jest doceniana.
(jeśli potrzebujesz czegoś wyjaśnionego wyraźniej, po prostu zapytaj i jak najszybciej odpowiem.
Jeszcze raz dziękuję, pozdrawiam