所有动态列的总和

时间:2018-10-12 05:57:26

标签: sql sql-server column-sum

这是我需要找到的,

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

我发现了如何使用以下查询来生成动态生成的列。

POST /url HTTP/1.1[CRLF]
Content-Type: application/json; charset=UTF-8[CRLF]
Accept: application/json, application/javascript, text/javascript[CRLF]
Content-Length: 0[CRLF]
Host: localhost:8888[CRLF]
Connection: Keep-Alive[CRLF]
User-Agent: Apache-HttpClient/4.5.3 (Java/1.8.0_112)[CRLF]
Accept-Encoding: gzip,deflate[CRLF]
[CRLF]

它显示以费用结尾的列。

我有30多个收费专栏。 我的数据如下所示。

Data

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

我尝试使用以下查询。

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

在'select'附近显示语法错误。

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

1 个答案:

答案 0 :(得分:2)

首先,以逗号分隔的所有列以'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