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

SQL Server分类数据表转换:按Status和Verified_Status唯一值统计计数

实现方案

需求本质是双分类字段的行转列按年聚合统计,SQL Server中可以通过以下两种方案实现:

方案1:已知枚举值的静态写法(性能最优,适配你的样例场景)

直接用条件聚合实现,逻辑清晰易维护:

SELECT
    Year,
    SUM(CASE WHEN Status = 'Accepted' THEN 1 ELSE 0 END) AS Accepted,
    SUM(CASE WHEN Status = 'Rejected' THEN 1 ELSE 0 END) AS Rejected,
    SUM(CASE WHEN Verified_Status = 'Verified' THEN 1 ELSE 0 END) AS Verified,
    SUM(CASE WHEN Verified_Status = 'Unverified' THEN 1 ELSE 0 END) AS Unverified
FROM 你的实际表名
GROUP BY Year
ORDER BY Year DESC

把代码中的你的实际表名替换为真实表名,执行结果和你给出的期望输出完全一致。

方案2:未知枚举值的动态写法

如果两个字段的枚举值会动态新增,不想每次手动修改代码,可以用动态SQL自动拼接所有唯一值生成查询语句:

DECLARE @sql NVARCHAR(MAX) = N'SELECT Year '

-- 拼接Status字段的所有唯一值统计列
SELECT @sql += N', SUM(CASE WHEN Status = ''' + [Value] + ''' THEN 1 ELSE 0 END) AS ' + QUOTENAME([Value])
FROM (SELECT DISTINCT Status AS [Value] FROM 你的实际表名) t

-- 拼接Verified_Status字段的所有唯一值统计列
SELECT @sql += N', SUM(CASE WHEN Verified_Status = ''' + [Value] + ''' THEN 1 ELSE 0 END) AS ' + QUOTENAME([Value])
FROM (SELECT DISTINCT Verified_Status AS [Value] FROM 你的实际表名) t

SET @sql += N' FROM 你的实际表名 GROUP BY Year ORDER BY Year DESC'

EXEC sp_executesql @sql

注意:如果枚举值里存在特殊字符或空格,动态写法中的QUOTENAME会自动处理转义,避免语法报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 04:45:05