You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何统计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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:08:41