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

SQL Server中如何对前缀相同的列求和?

在SQL Server中计算指定前缀列的求和

方法一:静态求和(列数固定时使用)

当明确列是Pref_01到Pref_40时,直接将所有目标列相加即可,这种方式高效直观:

SELECT 
    ID,
    ISNULL(Pref_01, 0) + ISNULL(Pref_02, 0) + ISNULL(Pref_03, 0) 
    + ... + ISNULL(Pref_40, 0) AS Sum_pref
FROM 
    你的表名;

提示:如果列可能包含NULL值,必须用ISNULL()将NULL转为0,否则整个求和结果会变成NULL

方法二:动态SQL(列数可变时使用)

如果后续Pref_开头的列可能新增或删除,用动态SQL可以自动适配所有符合条件的列,无需手动修改代码:

适用于SQL Server 2017及以上版本

DECLARE @sql NVARCHAR(MAX);

-- 拼接所有Pref_开头列的求和表达式
SELECT @sql = STRING_AGG(
    CONCAT('ISNULL(', QUOTENAME(name), ', 0)'), ' + '
)
FROM sys.columns
WHERE object_id = OBJECT_ID('你的表名')  -- 替换为你的表名
AND name LIKE 'Pref_%';

-- 组合完整的查询语句
SET @sql = CONCAT(
    'SELECT ID, ', @sql, ' AS Sum_pref FROM 你的表名;'
);

-- 执行动态SQL
EXEC sp_executesql @sql;

适用于SQL Server 2016及更早版本

如果你的SQL Server版本不支持STRING_AGG,可以用FOR XML PATH来拼接字符串:

DECLARE @sql NVARCHAR(MAX);

SELECT @sql = STUFF(
    (
        SELECT ' + ISNULL(' + QUOTENAME(name) + ', 0)'
        FROM sys.columns
        WHERE object_id = OBJECT_ID('你的表名')
        AND name LIKE 'Pref_%'
        FOR XML PATH(''), TYPE
    ).value('.', 'NVARCHAR(MAX)'),
    1, 3, ''  -- 去掉开头多余的' + '
);

SET @sql = CONCAT(
    'SELECT ID, ', @sql, ' AS Sum_pref FROM 你的表名;'
);

EXEC sp_executesql @sql;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 17:50:22