加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

SQLITE – 正确地将行转换为列

发布时间:2020-12-12 18:55:34 所属栏目:百科 来源:网络整理
导读:我有一个包含产品订单表的数据库,如下所示: order_id | prod_code | prod_color | size | quantity | -----------------------------------------------------1 SHIRT 001 S 101 SHIRT 001 M 71 SHIRT 001 L 81 SHIRT 001 XL 11 SHIRT 995 S 21 SHIRT 995 M
我有一个包含产品订单表的数据库,如下所示:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读