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

SQL求助:关联Sales Orders等3张表实现销售订单产品信息单行输出

问题原因

你的语句出现同订单拆分为多行的核心原因是GROUP BY子句同时包含了Product Category、Sensor、Tablet三个字段:同个订单下的传感器、平板分属不同的订单项行,这三个字段的取值组合存在差异,就会被拆分为独立的分组输出,原语句里的DISTINCT也没有实际作用可以删除。

调整方案

仅按销售订单IDSOID分组,对其余三个计算字段使用聚合函数(如MAX)忽略空值,合并同个订单的所有取值即可,调整后的查询语句如下:

SELECT
    "Sales Orders"."id" AS "SOID",
    MAX(IF("Products"."SubType2" LIKE '%Sensors%', "Products"."Product Category", '')) AS "Product Category",
    MAX(IF("Products"."SubType2" LIKE '%Sensors%', "Products"."SubType3", '')) AS "Sensor",
    MAX(IF("Products"."SubType2" LIKE '%Tablets%', "Products"."SubType3", '')) AS "Tablet"
FROM "Sales Orders"
LEFT JOIN "Ordered Items" ON "Sales Orders"."id" = "Ordered Items"."Parent ID" 
INNER JOIN "Products" ON "Ordered Items"."Product Name" = "Products"."id"  
GROUP BY "Sales Orders"."id"

补充说明

如果同一个订单下存在多个同类型产品(比如2个不同型号的传感器),可以把MAX替换为对应数据库的字符串聚合函数,拼接多个型号值:

  • MySQL 使用 GROUP_CONCAT:GROUP_CONCAT(IF("Products"."SubType2" LIKE '%Sensors%', "Products"."SubType3", '') SEPARATOR ',') AS "Sensor"
  • PostgreSQL、SQL Server 使用 STRING_AGG:STRING_AGG(IF("Products"."SubType2" LIKE '%Sensors%', "Products"."SubType3", ''), ',') AS "Sensor"

内容的提问来源于stack exchange,提问作者Ryan Fisher

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 12:48:02