BeN*_*ErR 5 sql database sqlite
我有一个包含产品订单表的数据库,如下所示:
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 ....
Run Code Online (Sandbox Code Playgroud)
和这样的产品价格表:
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 ....
Run Code Online (Sandbox Code Playgroud)
我想得到的是一个这样的视图(为了简单过滤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
Run Code Online (Sandbox Code Playgroud)
我已经浏览了网页并通过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
Run Code Online (Sandbox Code Playgroud)
将在价格列中返回,对于每一行,在整列中找到MAX值:因此对于[product_color = 001]和[product_color = 995],我的价格等于20欧元(当001为更便宜时,仅10欧元!)
我也试过没有MAX,但它给了我一行每个价格,留下很多单元格空(然后我明白MAX用于:D).
你知道怎样做我想做的事吗?如何通过每个prod_color在单个prod_color中使用MAX?
我希望你能理解我写的内容,在此先感谢,任何帮助都表示赞赏.
(如果你需要更清楚地解释一些问题,请尽快问我,我会回答.
再次感谢,最好的问候
我添加了额外的JOIN条件:AND o.prod_color = p.prod_color
http://sqlfiddle.com/#!5/fadad/5
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
AND o.prod_color = p.prod_color /* this line is added */
WHERE o.order_id = '1'
GROUP BY
o.order_id,
o.prod_code,
o.prod_color,
o.size,
o.quantity
Run Code Online (Sandbox Code Playgroud)
简化的示例查询没有GROUP BY显示差异:
http://sqlfiddle.com/#!5/fadad/13