Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Суммирование столбцов в таблице  [new]
Barmaqlot
Member

Откуда:
Сообщений: 6
Приветствую всех! Нужна ваша помощь.

Имеется запрос:



USE Database1
GO
SELECT
Column0
, SUM (Column1)
, SUM (Column2)
, SUM (Column3)
, SUM (Column4)
, SUM (Column5)
, SUM (Column6)
, SUM (Column7)
, SUM (Column8)
...
, SUM (Column999)
, SUM (Column1000)
FROM table1
GROUP BY Column0

Таблица table1 содержит 1001 столбец (Column). Причем, их численность и названия могут меняться. Как проссумировать каждый столбец (обязательно сгруппировать по столбцу Column0), чтобы каждый раз не писать вручную все тысяча строк (а то и больше, если в таблицу добавать еще, скажем, 500 столбцов):

, SUM (Column1)
, SUM (Column2)
, SUM (Column3)
, SUM (Column4)
, SUM (Column5)
, SUM (Column6)
, SUM (Column7)
, SUM (Column8)
...
, SUM (Column999)
, SUM (Column1000)



Название столбцов я могу вывести из запроса:

USE Database1
GO
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'table1'

Но как сделать запрос динамическим, пока не знаю (((
17 май 13, 13:46    [14311580]     Ответить | Цитировать Сообщить модератору
 Re: Суммирование столбцов в таблице  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Barmaqlot
Таблица table1 содержит 1001 столбец (Column).

Для чего столько?! Выглядит так, что у вас серьёзная проблема с дизайном БД.
17 май 13, 13:56    [14311707]     Ответить | Цитировать Сообщить модератору
 Re: Суммирование столбцов в таблице  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
Barmaqlot,
DECLARE @sql varchar(max), @n int

SELECT @n=COUNT(*)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'table1' 
SET @n=N'USE Database1
GO
SELECT 
Column0,
WHILE @n>0 
BEGIN

SET @sql=@sql+'SUM(Column'+@convert(varchar,@n)+'),'

END
SET @sql=LEFT(@sql,LEN(@sql)-1)
SET @sql=@sql+'FROM table1 GROUP BY Column0'

exec(@sql)


ориентировочно так.
17 май 13, 13:57    [14311715]     Ответить | Цитировать Сообщить модератору
 Re: Суммирование столбцов в таблице  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
DECLARE @sql varchar(max), @n int

SELECT @n=COUNT(*)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'table1' 
SET @n=N'SELECT Column0,'
WHILE @n>0 
BEGIN

SET @sql=@sql+'SUM(Column'+@convert(varchar,@n)+'),'

END
SET @sql=LEFT(@sql,LEN(@sql)-1)
SET @sql=@sql+'FROM table1 GROUP BY Column0'

exec(@sql)


Ошибка в одной ковычке и USE Database1 там не надо
17 май 13, 13:58    [14311726]     Ответить | Цитировать Сообщить модератору
 Re: Суммирование столбцов в таблице  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
[SRC sql]
DECLARE @sql varchar(max), @n int

SELECT @n=COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'table1'
SET @sql=N'SELECT Column0,'

WHILE @n>0
BEGIN

SET @sql=@sql+'SUM(Column'+convert(varchar,@n)+'),'

END
SET @sql=LEFT(@sql,LEN(@sql)-1)
SET @sql=@sql+'FROM table1 GROUP BY Column0'

EXEC(@sql)
[/sql]
Во) Сорри, без редактора пока сижу. )))
17 май 13, 14:00    [14311754]     Ответить | Цитировать Сообщить модератору
 Re: Суммирование столбцов в таблице  [new]
Barmaqlot
Member

Откуда:
Сообщений: 6
Сергей Викт., огромное спасибо! Вы просто умница! Сейчас попробую.
17 май 13, 14:04    [14311795]     Ответить | Цитировать Сообщить модератору
 Re: Суммирование столбцов в таблице  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Barmaqlot
Таблица table1 содержит 1001 столбец (Column).
...
(а то и больше, если в таблицу добавать еще, скажем, 500 столбцов):

Если что, в обычной таблице не может быть больше 1024 столбцов. Для широких таблиц (до 30000 столбцов) надо использовать sparse columns.
17 май 13, 14:05    [14311808]     Ответить | Цитировать Сообщить модератору
 Re: Суммирование столбцов в таблице  [new]
Barmaqlot
Member

Откуда:
Сообщений: 6
Гость333, в действительности, колонок 23. Тысячу столбцами я хотела исключить комментарий "пишите запрос вручную" :-)
17 май 13, 14:06    [14311828]     Ответить | Цитировать Сообщить модератору
 Re: Суммирование столбцов в таблице  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
Barmaqlot
Сейчас попробую.


Только сначала попробуйте не exec(@sql), а SELECT @sql, скопируйте результат в окно SSMS и нажмите галочку (Parse). Проверить правильность кода.
17 май 13, 14:07    [14311839]     Ответить | Цитировать Сообщить модератору
 Re: Суммирование столбцов в таблице  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
Barmaqlot
Гость333, в действительности, колонок 23. Тысячу столбцами я хотела исключить комментарий "пишите запрос вручную" :-)


А хах ах )) Какая хитренькая)) Молодец) Далеко пойдёшь)
Попобовали?
17 май 13, 14:08    [14311843]     Ответить | Цитировать Сообщить модератору
 Re: Суммирование столбцов в таблице  [new]
Barmaqlot
Member

Откуда:
Сообщений: 6
Сергей Викт., блестяще!! Спасибо огромное. Кое-что подкорректировала, и заработало! ( Ввела строчку SET @n=@n-1 между BEGIN и END. И дала названия колонкам ') AS SumColumn'+convert(varchar,@n)+').

На всякий случай, всем желающим, проверенный рабочий код:

USE database1
GO

DECLARE @sql varchar(max), @n int

SELECT @n=COUNT(*)-1 FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'Table_1'

SET @sql=N'SELECT Column0, '
WHILE @n>0
BEGIN
SET @sql=@sql+' SUM(Column' + convert(varchar,@n) + ') AS SumColumn'+convert(varchar,@n)+','
SET @n=@n-1
END

SET @sql=LEFT(@sql,LEN(@sql)-1)

SET @sql=@sql+' FROM Table_1 GROUP BY Column0'

EXEC(@sql)


И мои бесконечные благодарности Сергею Викт.
17 май 13, 15:51    [14312713]     Ответить | Цитировать Сообщить модератору
 Re: Суммирование столбцов в таблице  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
Barmaqlot
Ввела строчку SET @n=@n-1

Точно. Это я тупанул слегка. Сорри:)
Рад, что смог чуточку помочь! Сам тут у гугу SQL постоянно совета прошу:)
17 май 13, 15:55    [14312740]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить