如何统计SQL Server含Ticker列的所有表中唯一Ticker数量
解决方案:统计含Ticker列的表的唯一值数量
我来帮你搞定这个需求!下面是完整的SQL脚本,能精准统计所有包含Ticker列的表中该列的唯一值数量,输出你要的表格格式:
-- 创建临时表存储结果 CREATE TABLE #counts ( TableName NVARCHAR(128), ColumnName NVARCHAR(128), UniqueTickerCount INT ) -- 使用sp_MSForEachTable遍历所有表,过滤含Ticker列的表并统计 EXEC sp_MSForEachTable ' -- 检查当前表是否存在Ticker列 IF EXISTS ( SELECT 1 FROM sys.columns c JOIN sys.tables t ON c.object_id = t.object_id WHERE c.name = ''Ticker'' AND t.object_id = OBJECT_ID(''?'') ) BEGIN -- 插入统计结果到临时表 INSERT INTO #counts (TableName, ColumnName, UniqueTickerCount) SELECT QUOTENAME(''?''), ''Ticker'', COUNT(DISTINCT Ticker) FROM ? END ' -- 查询最终结果 SELECT TableName, ColumnName, UniqueTickerCount FROM #counts ORDER BY TableName -- 清理临时表(可选,会话结束后会自动删除) DROP TABLE #counts
关键细节说明:
- 过滤不含Ticker列的表:通过
sys.columns和sys.tables系统视图关联查询,判断当前遍历的表(通过OBJECT_ID('?')获取ID)是否存在名为Ticker的列,只有存在时才执行统计逻辑。 - 处理特殊表名:用
QUOTENAME('?')包裹表名,避免表名包含空格、关键字或特殊字符时出现语法错误。 - 统计唯一值:使用
COUNT(DISTINCT Ticker)来计算该列的唯一值数量,确保结果准确。
替代方案(更稳定的动态SQL方式)
如果担心未公开存储过程sp_MSForEachTable的兼容性,可以用动态SQL实现相同逻辑:
DECLARE @sql NVARCHAR(MAX) = '' SELECT @sql += ' INSERT INTO #counts (TableName, ColumnName, UniqueTickerCount) SELECT ''' + QUOTENAME(t.name) + ''', ''Ticker'', COUNT(DISTINCT Ticker) FROM ' + QUOTENAME(t.name) + ';' FROM sys.tables t JOIN sys.columns c ON t.object_id = c.object_id WHERE c.name = 'Ticker' CREATE TABLE #counts ( TableName NVARCHAR(128), ColumnName NVARCHAR(128), UniqueTickerCount INT ) EXEC sp_executesql @sql SELECT TableName, ColumnName, UniqueTickerCount FROM #counts ORDER BY TableName DROP TABLE #counts
内容的提问来源于stack exchange,提问作者CodeSsscala
相关产品推荐
相关产品推荐

