SQLITE – 正确地将行转换为列

前端之家收集整理的这篇文章主要介绍了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_color

http://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

猜你在找的Sqlite相关文章