You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于非主键合并多行数据为单行并按产品ID拆分数量列的SQL查询实现求助

实现订单产品数量的行转列查询

针对你需要将订单中的产品数量按order_id分组,转换为以quantity_产品ID命名列的需求,因为已知产品ID固定为111、112、113,我们可以用条件聚合的方式来实现,这是处理固定列转行场景最直接的方法。

完整SQL查询语句

假设你的原始表名为order_items(如果实际表名不同,请自行替换):

SELECT
    order_id,
    SUM(CASE WHEN product_id = '111' THEN quantity ELSE NULL END) AS quantity_111,
    SUM(CASE WHEN product_id = '112' THEN quantity ELSE NULL END) AS quantity_112,
    SUM(CASE WHEN product_id = '113' THEN quantity ELSE NULL END) AS quantity_113
FROM
    order_items
GROUP BY
    order_id
ORDER BY
    order_id;

语句解释

  1. 条件聚合:用CASE WHEN判断当前行的product_id是否匹配目标产品,匹配则返回对应的quantity,否则返回NULL;再通过SUM(或者MAX也可以,因为每个订单下同一产品只会出现一次)聚合得到该订单对应产品的数量。
  2. 分组合并:通过GROUP BY order_id把同一订单的所有行合并为一行,实现按订单维度的汇总。
  3. 列名自定义:用AS关键字将聚合后的列命名为quantity_产品ID的格式,完全匹配你期望的结果结构。

执行结果验证

运行上述语句后,会输出你想要的格式:

order_idquantity_111quantity_112quantity_113
A231
B51NULL
CNULL2NULL

如果你的数据库支持IF函数(比如MySQL),也可以用更简洁的写法,效果完全一致:

SELECT
    order_id,
    SUM(IF(product_id = '111', quantity, NULL)) AS quantity_111,
    SUM(IF(product_id = '112', quantity, NULL)) AS quantity_112,
    SUM(IF(product_id = '113', quantity, NULL)) AS quantity_113
FROM
    order_items
GROUP BY
    order_id
ORDER BY
    order_id;

内容的提问来源于stack exchange,提问作者Akash Agarwal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 01:07:34