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

SQL Server中count聚合后如何合并同客户名的行数据求和

问题根因

你当前查询返回同客户多条分散记录,核心错误在GROUP BY的分组粒度设置:你把交易明细维度的td.BikeID、td.TransactionID、Quantity都加入了分组字段,最终聚合的是「单个客户+单笔交易+单款车型」维度的数据,自然无法输出客户维度的汇总结果。
原查询执行返回结果如下:
查询结果截图

修正方法

调整分组规则为客户维度,同时修正聚合逻辑避免统计错误:

  • 分组字段仅保留客户级唯一属性:CustomerName、CustomerPhone,剔除交易、车型、单条购买数量这类明细级字段
  • 总交易数统计时使用去重计数,避免同笔交易下买多辆车时重复计数交易
  • 总购车数直接对所有关联明细的quantity字段求和即可
  • 额外提醒:你原写法里的手机号替换逻辑会把号码中所有的0都替换为+62,如果仅需要把号码开头的前缀0替换为印尼区号+62,可以调整对应的字符串处理逻辑

修正后可直接运行的SQL代码

select 
    CustomerName, 
    count(DISTINCT th.TransactionID) as [Total Transactions], 
    sum(td.quantity) as [Total Bikes Bought],
    -- 保留原替换逻辑用这行
    replace(customerphone, '0', '+62') as [Customer Phone]
    -- 仅替换开头前缀0可以改用下面这行
    -- '+62' + stuff(customerphone,1,1,'') as [Customer Phone]
from MsCustomer mc 
join TransactionHeader th
    on mc.CustomerID = th.CustomerID 
join TransactionDetail td
    on th.TransactionID = td.TransactionID 
join MsBike mb
    on td.BikeID = mb.BikeID
group by CustomerName, CustomerPhone
having sum(td.Quantity) > 5 
    and count(DISTINCT th.TransactionID) between 2 and 5

执行上述代码后,相同客户的交易数、购车数会自动汇总到同一行,就能得到你期望的类似(cendana, 2, 16, +6283859786138)格式的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 16:18:25