Microsoft SQL查询求助:新增列统计MRN的出现次数
解决SQL中新增分组计数列的问题
错误原因
你直接使用COUNT(mrn)属于聚合函数,SQL的聚合规则要求:当SELECT语句中包含聚合函数时,所有非聚合列必须出现在GROUP BY子句中。但你的需求是保留所有原始数据行,同时每行显示对应mrn的总出现次数,普通聚合分组会合并行,不符合需求,因此需要用窗口函数来实现。
解决方案
使用窗口函数COUNT() OVER(PARTITION BY ...),它会在不合并行的前提下,对指定分组内的行数进行统计,并将结果赋值给分组内的每一行。
方法1:使用CTE(公共表表达式)
把你现有的复杂查询封装成CTE,再添加计数列:
WITH OriginalData AS ( -- 替换成你实际的复杂查询语句 SELECT mrn, name, Med1, Med2, Med4 FROM your_table_or_complex_query ) SELECT mrn, name, COUNT(mrn) OVER(PARTITION BY mrn) AS count, Med1, Med2, Med4 FROM OriginalData;
方法2:使用子查询
直接在原查询外层添加计数列:
SELECT mrn, name, COUNT(mrn) OVER(PARTITION BY mrn) AS count, Med1, Med2, Med4 FROM ( -- 替换成你实际的复杂查询语句 SELECT mrn, name, Med1, Med2, Med4 FROM your_table_or_complex_query ) AS SubQuery;
说明
PARTITION BY mrn表示按照mrn进行分组统计,因为示例中name与mrn一一对应,也可以写成PARTITION BY mrn, name,结果一致。- 窗口函数不会改变原始数据的行数,只是为每行添加对应分组的统计值,完美匹配你的预期结果。
内容的提问来源于stack exchange,提问作者LittleNest
相关产品推荐
相关产品推荐

