如何动态计算GROUP中许多列的总和?

use*_*719 4 sql sql-server group-by aggregate-functions sql-server-2008

在下表中,我有一个可变数量的列,并且该数字在1000s内.我需要将按人名分组的1000列中的每一列的所有值相加.所以,smith's总数test_score_1,总数test_score_2,......总数test_score_1000.然后是Jackson's总数test_score_1,总数test_score_2,......总数test_score_1000.

test_score_n事先并不知道' '列的数量,而且它们总是在变化.

所以给这个表:

name      test_score_1 test_score_2 ...  test_score_1000
  smith        2              1                 0
  jackson      0              3                 1
  jackson      1              1                 2
  jackson      3              0                 3
  smith        4              5                 1
Run Code Online (Sandbox Code Playgroud)

我如何制作下表?

name      test_score_1 test_score_2 ...  test_score_1000
  smith        6              6                1
  jackson      4              4                6
Run Code Online (Sandbox Code Playgroud)

gbn*_*gbn 7

SQL生成SQL

DECLARE @generatedSQL nvarchar(max);

SET @generatedSQL = (

SELECT
    'SELECT ' + 
    SUBSTRING(X.foo, 2, 2000) + 
    'FROM ' + 
    QUOTENAME(SCHEMA_NAME(t.schema_id)) + '.' + QUOTENAME(t.name) +
    ' GROUP BY name' --fix this line , edited
FROM
    sys.tables t
    CROSS APPLY 
    (
    SELECT
        ', SUM(' + QUOTENAME(c.name) + ')'
    FROM 
        sys.columns c 
    WHERE 
        c.object_id = t.object_id
        AND
        c.name <> 'Name'
    FOR XML PATH('')
    ) X (foo)
WHERE
    t.name = 'MyTable'
 );

EXEC (@generatedSQL);
Run Code Online (Sandbox Code Playgroud)