我有一个包含产品订单表的数据库,如下所示:
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,我发现这个问题向我展示了我需要做什么,但我认为有一些修改......
我尝试在数据库上运行此查询:
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 欧元(当 001 更便宜时,只有10欧元!)
我也尝试过不使用 MAX,但它为每个价格提供了一行,使许多单元格为空(然后我明白了 MAX 的用途:D)。
你知道一种方法来做我想做的事吗?如何在单个 prod_color 中使用 MAX,而不是通过每个 prod_color 使用?
我希望你能理解我写的东西,在此先感谢,任何帮助表示赞赏。
(如果您需要更清楚的解释,请询问并尽快回复。
再次感谢,最好的问候