次のような製品注文のテーブルを含むデータベースがあります。
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 ....
そして、次のような製品価格表:
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 ....
私が取得したいのは、次のようなビューです (簡単にするために、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
私はすでにウェブとSOを調べており、何をする必要があるかを正確に示しているTHIS QUESTIONを見つけましたが、いくつかの変更を加えて考えています...
データベースでこのクエリを実行しようとしました:
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
すべての行について、列全体で見つかった MAX 値が価格列に返されます。したがって、[product_color = 001] と [product_color = 995] の両方で、価格は 20 EURO に等しくなります (001 の方が安い場合は、 10ユーロ!)
私もMAXなしで試しましたが、価格ごとに1行が表示され、多くのセルが空のままになります(その後、MAXが何に使用されるかを理解しました:D)。
私がやろうとしていることをする方法を知っていますか?すべての prod_color ではなく、単一の prod_color 内で MAX を使用するにはどうすればよいですか?
私が書いたことを理解していただければ幸いです。事前に感謝します。助けていただければ幸いです。
(もっと明確な説明が必要な場合は、質問してください。できるだけ早く返信します。
改めまして、よろしくお願いいたします