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

如何在SQL Server中统计列内唯一数据数量并生成带键值的索引结果

SQL Server 统计指定列唯一值出现次数并输出指定格式

核心实现逻辑

先对目标列做分组计数,再将统计结果拼接为要求的键值对字符串格式,直接替换代码中的自定义表名、列名即可使用。


版本兼容写法

1. SQL Server 2017及以上版本(支持STRING_AGG函数)

DECLARE @result_str VARCHAR(MAX)
SELECT @result_str = CONCAT('array = [', 
    -- 可通过修改第二个参数调整分隔符,改为';'即可用分号分隔键值对
    STRING_AGG(CONCAT(your_target_column, '=', COUNT(*)), ',') 
    WITHIN GROUP (ORDER BY COUNT(*) DESC, your_target_column),
    ']')
FROM your_table
-- 按需添加过滤条件,比如排除NULL值、指定时间范围等
WHERE your_target_column IS NOT NULL
GROUP BY your_target_column

SELECT @result_str AS final_output

2. SQL Server 2016及更早版本(无STRING_AGG,用FOR XML PATH实现拼接)

DECLARE @result_str VARCHAR(MAX)
SET @result_str = 'array = ['

SELECT @result_str = @result_str + CONCAT(your_target_column, '=', cnt, ',')
FROM (
    -- 先做分组计数
    SELECT your_target_column, COUNT(*) AS cnt
    FROM your_table
    WHERE your_target_column IS NOT NULL
    GROUP BY your_target_column
) t
-- 按计数降序、键值升序排序,和高版本逻辑保持一致
ORDER BY t.cnt DESC, t.your_target_column

-- 处理无数据的边界情况,避免截取字符串报错
IF @result_str = 'array = ['
    SET @result_str = 'array = []'
ELSE
    -- 去掉末尾多余的逗号,补全右括号
    SET @result_str = LEFT(@result_str, LEN(@result_str) - 1) + ']'

SELECT @result_str AS final_output

注意事项

  • 如果目标列是非字符串类型(数值、日期等),需要先转为字符串再拼接,避免类型转换报错,示例:CAST(your_target_column AS VARCHAR(50))
  • 可灵活调整统计规则:如果需要保留NULL值的统计,可去掉WHERE your_target_column IS NOT NULL的过滤条件,同时对NULL值做替换,示例:ISNULL(CAST(your_target_column AS VARCHAR(50)), 'NULL')
  • 如果需要调整键值对的分隔符,可直接修改STRING_AGG的第二个参数,或修改低版本代码中拼接的逗号即可

内容的提问来源于stack exchange,提问作者Django

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 21:45:07