如何在选择查询中获取动态生成的行的总数

时间:2016-12-01 09:09:52

标签: sql-server tsql sql-server-2012

double x = Math.Sqrt(2/3);
MessageBox.Show(x.ToString());

我有一个临时表FirstName&姓。该表还将包含动态生成的列,具体取决于传递给存储过程的参数。动态添加的列可以是10,100或2。

我可以访问上面声明的DECLARE @DynamicColumns VARCHAR(MAX) SET @DynamicColumns = '[Mon, Oct 31 2016], [Tue, Nov 1 2016], [Wed, Nov 2 2016], [Thu, Nov 3 2016],[Many More Columns Can be Added]' 变量中生成的列的名称。

列名称采用上面显示的格式,并以逗号(,)

分隔

问题:如果我写下面的查询,我可以获得所有动态添加的列所需的所有行。

@DynamicColumns

但是我如何计算动态添加列的总和并将其作为额外的" Total"每行的列。

我会写像

这样的东西
SELECT * FROM ##TempTable1

但是这些列将是动态的,因此无法工作。(但我可以访问变量SELECT *, [Mon, Oct 31 2016] + [Tue, Nov 1 2016] + [Wed, Nov 2 2016] + [Thu, Nov 3 2016] AS Total FROM ##TempTable1 中的列名称)

我需要的是如下所示,但如何从变量@DynamicColumns中提取我的列名并得到它们的总和?

@DynamicColumns

1 个答案:

答案 0 :(得分:1)

您可以创建新的动态T-SQL语句:

DECLARE @DynamicSQLStatement NVARCHAR(MAX) = N'
SELECT *, ' + REPLACE(@DynamicColumns, ',', '+') + '  AS Total 
FROM ##TempTable1;'

exec @DynamicSQLStatement

我刚才看到,您在列名中有,,因此您可以用逗号代替], [

REPLACE(@DynamicColumns, '], [', '] + [')