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

SQL Server合并订单记录:统计含产品1&2或1&3的订单数

解决订单合并统计的SQL问题

嘿,这个问题很常见——你现在的GROUP BY里包含了Style,所以每个订单下不同的款式会拆成单独的行,自然没法合并成一条订单记录。咱们调整一下SQL的聚合逻辑就能搞定!

修改后的SQL语句

SELECT 
    b.Order,
    MAX(CASE WHEN Style IN ('2','3') THEN '1' ELSE '0' END) AS Pants,
    MAX(CASE WHEN Style = '1' THEN '1' ELSE '0' END) AS Tunic
FROM a
INNER JOIN b ON a.join1 = b.join1
INNER JOIN c ON b.join2 = c.join2
WHERE Style IN ('1','2','3')
GROUP BY b.Order
ORDER BY b.Order;

关键调整点

  • 去掉Style的分组:把GROUP BY里的Style删掉,只按b.Order分组,这样每个订单只会生成一行记录。
  • 用聚合函数MAX()包裹CASE:MAX()会取每个订单下所有行的最大值——只要这个订单里有至少一个款式是2/3,Pants就会是'1';同理,只要有款式1,Tunic就会是'1',完美实现你要的合并效果。

后续统计需求扩展

如果之后你需要直接统计同时包含产品1和2,或1和3的订单数量,可以在上面的查询基础上再加一层筛选:

SELECT COUNT(DISTINCT Order) AS Qualified_Orders
FROM (
    SELECT 
        b.Order,
        MAX(CASE WHEN Style IN ('2','3') THEN '1' ELSE '0' END) AS Pants,
        MAX(CASE WHEN Style = '1' THEN '1' ELSE '0' END) AS Tunic
    FROM a
    INNER JOIN b ON a.join1 = b.join1
    INNER JOIN c ON b.join2 = c.join2
    WHERE Style IN ('1','2','3')
    GROUP BY b.Order
) AS Order_Summary
WHERE Pants = '1' AND Tunic = '1';

这样就能直接得到符合条件的订单总数啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:20:54