2013-02-18 2 views
1

В MsSQL 2008, я пытаюсь показать сумму из трех разных столбцов в конце.Показать сумму столбца в конце столбца в mssql 2008

В настоящее время мой запрос возвращает enter image description here

это выбирается (@grouping = maingroup, подгруппа, subsubgroup, сезон, VendorID, [01] как '01', [02] как '02', Total)

set @sql = 'select '[email protected]+' from ##aa' 
execute sp_executesql @sql 

Мне нужна сумма 01,02 и Total в конце их соответствующих столбцов. Я пробовал использовать накопительный пакет, но это не дает мне правильного результата. Наверное, просто делаю это неправильно, но что должно было бы сделать заявление выбора, чтобы получить то, что мне нужно?

ответ

3

Два способа сделать это. Первый из них - старый способ pre sql-server-2008, чтобы сделать это: использовать UNION ALL с первым SELECT, возвращая исходные данные из таблицы, и второй возвращающий SUMS полей 01, 02 и Всего:

SELECT maingroup, 
     subgroup, 
     subsubgroup, 
     season, 
     vendorid, 
     [01] AS '01', 
     [02] AS '02', 
     Total AS Total 
FROM  #aa 
UNION ALL 
SELECT null as maingroup, 
     null as subgroup, 
     null as subsubgroup, 
     null as season, 
     null as vendorid, 
     sum([01]) AS '01', 
     sum([02]) AS '02', 
     sum(Total) AS Total 
FROM  #aa 

В sql-server-2008 и более поздних версиях для этого можно использовать GROUPING SETS. Equivlant запрос к одному гнушается GROUPING SETS является:

SELECT maingroup, 
     subgroup, 
     subsubgroup, 
     season, 
     vendorid, 
     sum([01]) AS '01', 
     sum([02]) AS '02', 
     sum(Total) AS Total 
FROM  #aa 
GROUP BY GROUPING SETS((maingroup, subgroup, subsubgroup, season, vendorid),()) 

Оба должны вернуться:

Results of GROUPING SETS

GROUPING SETS Equivalents и Using GROUP BY with ROLLUP, CUBE, and GROUPING SETS два дополнительных источников с хорошей информацией об использовании GROUPING SETS

+0

+1 для Представляя меня для группировки наборов –

+0

Спасибо, теперь мне просто нужно найти способ сделать эти пустые строки пустыми или пустыми, но сохраните их в десятичной системе. Также есть способ сделать NULL в последней строке также пустыми? – JohnZ

0
Select maingroup, subgroup, subsubgroup, season, vendorid, sum([01]) as '01', sum([02]) as '02', sum(Total) 
FROM ##aa 
Group by grouping sets ((maingroup, subgroup, subsubgroup, season, vendorid),()) 

Последняя запись будет состоять из строки с NULL во всех столбцах, кроме 01, 02 и всего.

Смежные вопросы