我正在开发一个程序,其中有多个列需要向最终用户显示总和。这些列在表ColumnTest中的ColumnNames列中分配,并且用户可以更改其名称。因此,我需要在ColumnTest \ ColumnNames中查找所有列名称,然后再对outputtable中与这些列名称有关的所有值求和。
我以前使用过此脚本,在该脚本中,我在@cols中获得了所有列名,例如[col1]。[col2]。[col3],依此类推,但是当我尝试运行查询时,我无法求和这些列使用'+ @cols +'。运行此命令时,出现以下错误:SUM函数需要1个参数。是否有可行的方法来执行此过程,而又不会大幅降低加载时间?
DECLARE
@cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX);
SELECT @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.ColumnNames)
FROM ColumnTest c
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)') ,1,1,'')
set @query =
'
SELECT
ID
,SUM('+ @cols + ')
FROM Output_table
GROUP BY
ID
'
execute(@query);
答案 0 :(得分:1)
尝试一下
DECLARE
@cols AS NVARCHAR(MAX)='',
@query AS NVARCHAR(MAX);
SELECT @cols += 'SUM('+ColumnNames+') as ['+ColumnNames+'],'
from
(
SELECT distinct ColumnNames FROM ColumnTest
)A
SELECT @cols=LEFT(@cols,LEN(@cols)-1)
set @query =
'
SELECT ID,'+ @cols + '
FROM Output_table
GROUP BY ID
'
execute(@query);
或者如果要添加所有列值,可以在查询下面使用
DECLARE @cols AS NVARCHAR(MAX)='',
@query AS NVARCHAR(MAX);
SELECT @cols += ''+ColumnNames+'+'
FROM
(
SELECT DISTINCT ColumnNames FROM ColumnTest
)A
SELECT @cols=LEFT(@cols,LEN(@cols)-1)
set @query =
'
SELECT ID,SUM('+ @cols + ')
FROM Output_table
GROUP BY ID
'
execute(@query);
答案 1 :(得分:0)
您不能使用逗号分隔,例如“,” 您可以使用“ +”
尝试一下
DECLARE
@cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX);
SELECT @cols = STUFF((SELECT distinct '+' + QUOTENAME(c.ColumnNames)
FROM ColumnTest c
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)') ,1,1,'')
set @query =
'
SELECT
ID
,SUM('+ @cols + ')
FROM Output_table
GROUP BY
ID
'
execute(@query);