【问题标题】:Sum of all dynamic columns所有动态列的总和
【发布时间】:2018-10-12 05:57:25
【问题描述】:

这是我需要找到的,

对动态生成的系统列中存在的所有值求和。

我找到了如何使用以下查询生成动态生成的列。

    declare @columnnames nvarchar(max) =  'select COLUMN_NAME FROM  [Powerbireports].INFORMATION_SCHEMA.COLUMNS
    where TABLE_NAME = ''FCL_Pivot'' and column_name like ''%Charges'''

它显示以费用结尾的列。

我有 30 多列费用。 我的数据如下所示。

Data

通过使用此列,我需要对 30 列中存在的所有值求和(使用上述查询)并更新到另一个名为处理的列。

我尝试使用以下查询。

    declare @dynamicsql nvarchar(max) = N'Update [dbo].[FCL_Pivot] set Handling = (select SUM('+@columnnames+'))'
    exec sp_executesql @dynamicsql

它在“选择”附近显示不正确的语法。

请帮助我如何克服此查询或任何替代方法。

【问题讨论】:

    标签: sql sql-server column-sum


    【解决方案1】:

    首先,构建一个以逗号分隔的所有以“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
    

    【讨论】:

      猜你喜欢
      • 2012-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-20
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多