You need to enable JavaScript to run this app. SQL Server指定列聚合统计时如何同步展示关联明细
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server指定列聚合统计时如何同步展示关联明细

问题根因

你原SQL的逻辑断点在最外层聚合层:

  • 最外层子查询仅按machine分组,只返回machine和计算的job_q两个字段
  • 所有原始明细字段(order_no、product_no、machine_name等)都会被聚合操作折叠丢弃,自然无法在结果中带出
解决方案

SQL Server 2008及以上版本直接使用窗口函数实现,无需折叠明细行,即可按机台分组计算聚合计数,并把计数值作为列附加到每一行明细上,完全匹配"明细+同组聚合值"的输出需求。
核心逻辑是使用OVER (PARTITION BY 分组字段)语法,在不触发全局group by折叠的前提下,按指定分组范围计算聚合值,完全保留原有计数口径(即按机台统计记录数后减1)。

修正后的完整查询语句:

SELECT 
  ab.order_no,
  ast.machine AS machine_no,
  product_no,
  machine_name,
  -- 按机台范围统计明细行数,保留原count-1的计算逻辑
  COUNT(*) OVER (PARTITION BY ast.machine) - 1 AS job_q
FROM table_ab ab
LEFT JOIN table_ast ast 
  ON ab.order_no = ast.order_no
WHERE 
  ab.order_no LIKE 'MO%'
  AND ast.machine IN ('MH6', 'M5X')
  AND ast.machine NOT LIKE 'OEM%'
  AND machine_name NOT LIKE 'PP2%'
  AND psd > '2021-01-17 00:00:00.000'
  AND ab.machine IS NOT NULL        
-- 保留你原逻辑中的去重规则,避免重复行导致计数偏差
GROUP BY 
  ab.order_no, 
  ast.machine, 
  product_no,
  machine_name, 
  quantity, 
  psd, 
  ped,
  esd, 
  time_1, 
  eed, 
  eet
ORDER BY ast.machine;

兼容旧版本的替代方案:如果使用的是不支持窗口函数的老旧SQL Server版本,可以先单独编写按machine计算job_q的聚合子查询,再将该结果与去重后的明细集合通过machine字段内连接,最终也能得到同样的结果,只是写法多一层关联,性能略低于窗口函数实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.08 07:06:10