sql - 所有动态列的总和
问题描述
这是我需要找到的,
对动态生成的系统列中存在的所有值求和。
我发现了如何使用以下查询生成动态生成的列。
declare @columnnames nvarchar(max) = 'select COLUMN_NAME FROM [Powerbireports].INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME = ''FCL_Pivot'' and column_name like ''%Charges'''
它显示以费用结尾的列。
我有 30 多列费用。我的数据如下所示。
通过使用这些列,我需要对 30 列中存在的所有值求和(使用上面的查询)并更新到另一个名为处理的列。
我尝试使用以下查询。
declare @dynamicsql nvarchar(max) = N'Update [dbo].[FCL_Pivot] set Handling = (select SUM('+@columnnames+'))'
exec sp_executesql @dynamicsql
它在“选择”附近显示不正确的语法。
请帮助我如何克服这个查询或任何替代方法。
解决方案
首先,构建以“charges”结尾的所有列的逗号分隔列表:
DECLARE @column_plus_str NVARCHAR(MAX)
SELECT @column_plus_str = STUFF((SELECT '+ISNULL(' + QUOTENAME(COLUMN_NAME)+ ', 0)'
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'FCL_Pivot' AND COLUMN_NAME LIKE '%charges'
FOR XML PATH('')), 1, 1, '')
然后更新处理。您不需要 SUM 聚合,因为您没有分组,对吗?处理 = ISNULL([100% 考试费用], 0)+ISNULL([50% 考试费用], 0) + ...
DECLARE @dynamicsql NVARCHAR(MAX) = N'Update [dbo].[FCL_Pivot] set Handling = ' + @column_plus_str
EXEC sp_executesql @dynamicsql
推荐阅读
- python - 使用条形图的数量来设置条形图的宽度/标签大小
- kaggle - kaggle 竞赛子模块在哪里?
- c# - 如何在多选中将 SelectedItem 属性设置为当前单击的元素
- php - 如何关闭 MAMP python 解释器
- c++ - 在 operator=( 以 clang 格式后中断
- java - 有没有办法将 Gradle / Cucumber / Selenium 测试集成到 Browserstack (Java) 中?
- c# - CultureInfo.ClearCachedData 仅适用于 WPF 在 .net 4.6 及更早版本中无法正常工作
- c++ - 在向量向量中创建轮廓(框)
- javascript - 删除 ng-bootstrap 轮播中的第一个和最后一个 V 形(Angular7 应用程序)
- selenium - 如何在不使用命令行的 Maven/Ant 的情况下构建基于 COMPILE TestNG 的框架