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
相关产品推荐
相关产品推荐

