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)
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)
| 归档时间: |
|
| 查看次数: |
317 次 |
| 最近记录: |