MS SQL 2016多表关联查询统计不同工单号出现次数的方法
报错原因
你触发的is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause是SQL Server的强制校验规则:使用COUNT、SUM这类聚合函数做统计时,SELECT子句里所有未被聚合函数包裹的字段,必须全部写入GROUP BY子句,之前的写法要么遗漏了GROUP BY分组逻辑,要么分组字段和SELECT非聚合字段不匹配。
可直接运行的正确代码
该写法完全适配SQL Server 2016 STD环境,返回结果和你预期的两列格式完全一致:
SELECT pf.value AS [Workorder#], COUNT(1) AS TotalCount FROM gagestation.dbo.part p INNER JOIN gagestation.dbo.part_factor pf ON p.part_id = pf.part_id INNER JOIN gagestation.dbo.qcc_file qf ON p.qcc_file_id = qf.qcc_file_id INNER JOIN gagestation.dbo.factor f ON pf.factor_id = f.factor_id WHERE f.factor_desc = 'Work Order #' GROUP BY pf.value ORDER BY pf.value
注意事项
- 不需要额外加DISTINCT关键字:GROUP BY逻辑本身会对pf.value做去重归组,
COUNT(1)会统计每个分组下的总记录数,正好对应每个工单号关联的测量记录条数。 - WHERE条件里的
factor_desc字段建议加上表别名f.前缀,避免多表存在同名字段时触发二义性报错。 - 该查询结果可直接作为Linked Server数据同步的数据源,没有使用SQL Server 2016以上版本的专属语法,跨版本兼容无问题。
内容的提问来源于stack exchange,提问作者Justin Carlson
相关产品推荐
相关产品推荐

