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 .... 和这样的产品价格表: 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 我已经浏览了网页并通过搜索引擎优化,我找到了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.quantity 将在价格列中返回,对于每一行,在整列中找到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_colorhttp://sqlfiddle.com/#!5/fadad/5 SELECT o.order_id,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.quantity 没有GROUP BY的简化示例查询显示了不同之处: http://sqlfiddle.com/#!5/fadad/13 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |