У меня есть следующие данные в таблице со столбцами Col1, Col2, Col3, Col4, Col5 ......... Col153
Пример данных в первых четырех столбцах таблицы:
CREATE TABLE dbo.MyTable (LocaID VARCHAR(10),Col1 INT, Col2 INT,Col3 INT,Col4 INT)
INSERT INTO dbo.MyTable values
('LV',2,6,4,7),('CH',4,8,3,1),('LV',1,3,9,3),('MC',7,0,5,4),
('LV',4,5,2,4),('MC',7,1,4,9),('MC',5,1,8,1),('CH',7,3,4,0),
('MC',2,5,7,3);
Есть 153 столбца, которые мне нужно суммировать индивидуально. Я использовал запрос ниже, чтобы получить список столбцов:
-- This is to get the columns names
SELECT
COLUMN_NAME AS Col_Names
INTO #Column
From INFORMATION_SCHEMA.COLUMNS
Where TABLE_NAME Like 'MyTable'
Я пытался использовать запрос ниже для их динамического суммирования:
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX);
SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(Col_Names)
FROM #Column
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
SET @query= 'SELECT
SUM('+@cols+')
FROM dbo.MyTable GROUP BY [LocaID]'
PRINT @query
Когда я печатаю результат, чтобы проверить, если запрос правильный, я получил это:
SELECT SUM([Col1],[Col2],[Col3],[Col4],[LocaID])
FROM dbo.MyTable GROUP BY [LocaID]
Что явно не правильно. Что мне нужно, это:
SELECT
[LocaID],
SUM([Col1]) AS [Col1],
SUM([Col2]) AS [Col2],
SUM([Col3]) AS [Col3],
SUM([Col4]) AS [Col4]
FROM dbo.MyTable
GROUP BY [LocaID]
Для всех 153 столбцов. В таблице только один LocaID.