SQL Server中统计指定列重复值出现次数的技术求助
解决SQL Server中统计ExtCode列重复值出现次数的问题
你的当前脚本是在查询系统元数据表INFORMATION_SCHEMA.COLUMNS,目的是找包含ExtCode列的表信息,这和你要统计列中数据重复次数的需求完全不相关,所以无法得到想要的结果。
针对单个已知表的解决方案
如果已经知道ExtCode所在的表(比如表名为TargetTable),可以用下面的语句统计每个重复值的出现次数(只显示出现次数>1的值):
SELECT ExtCode, COUNT(*) AS 出现次数 FROM TargetTable GROUP BY ExtCode HAVING COUNT(*) > 1;
如果需要统计所有重复记录的总条数(比如某个值出现3次,就算入3条),可以用:
SELECT COUNT(*) AS 重复记录总条数 FROM TargetTable WHERE ExtCode IN ( SELECT ExtCode FROM TargetTable GROUP BY ExtCode HAVING COUNT(*) > 1 );
针对多个表(不确定具体表)的解决方案
如果ExtCode列存在多个表中(比如你之前脚本里的Dim_xxx_View这类表),可以用动态SQL批量统计:
DECLARE @SQL NVARCHAR(MAX) = ''; -- 拼接所有包含ExtCode列的目标表的统计语句 SELECT @SQL += ' SELECT ''' + table_name + ''' AS 所属表, ExtCode, COUNT(*) AS 出现次数 FROM ' + QUOTENAME(table_name) + ' GROUP BY ExtCode HAVING COUNT(*) > 1 UNION ALL' FROM INFORMATION_SCHEMA.COLUMNS WHERE column_name = 'ExtCode' AND table_name LIKE 'Dim_%_View'; -- 匹配你之前脚本里的表命名规则 -- 移除最后多余的UNION ALL SET @SQL = LEFT(@SQL, LEN(@SQL) - 10); -- 执行动态SQL EXEC sp_executesql @SQL;
内容的提问来源于stack exchange,提问作者ZeroOne Z
相关产品推荐
相关产品推荐

