【问题标题】:How can i get the total of a rows dynamically generated columns in a select query如何在选择查询中获取动态生成的列的总行数
【发布时间】:2016-12-01 17:13:50
【问题描述】:
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]'

我有一个包含 FirstName 和 LastName 列的临时表。该表还将包含根据传递给存储过程的参数动态生成的列。动态添加的列可以是 10、100 或 2。

我可以在上面声明的@DynamicColumns 变量中访问生成列的名称。

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

问题:如果我编写下面的查询,我可以得到我想要的所有行以及所有动态添加的列。

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 中提取列名并得到它们的总和?

SELECT *, SUM(@DynamicColumns) AS Total -- the Sum of all columns in @DynamicColumns
FROM ##TempTable1

【问题讨论】:

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


    【解决方案1】:

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

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

    我刚刚看到,你在列名中有,,所以你可以用逗号替换], [

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

    【讨论】:

      猜你喜欢
      • 2017-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多