2009-11-09 5 views
4

Hi Stackoverflow super stars ...SQL итоговая строка после подробностей

Вот моя проблема. У меня есть хранимая процедура, которая выводит довольно простую таблицу сгруппированных и суммированных значений. Типичный материал ... название компании, количество клиентов в компании, коммерческий представитель компании, годовой доход для компании и т. Д.

Это хорошо работает.

Теперь мне нужна сводная строка. Последней строкой выхода должна быть сумма количества клиентов, годовой доход и т. Д. Вид того же самого действия, который вы бы сделали, нажав кнопку autosum в excel. (Который кстати именно то, что мы делаем сейчас.)

Мое предположение заключается в том, чтобы вставить все данные в временную таблицу в хранимую процедуру, а затем вставить итоговые значения в самом конце до выплескивания данных.

Мысли? Это слишком запутанно?

Thanks,

ответ

1

Ваш темп стол предложение звучит довольно хорошо.

Возможно, что хранимая процедура возвращает два отдельных набора результатов, но обычно это становится проблемой, когда вам нужно читать данные через ADO.NET или что-то еще.

Но ваше собственное предложение о таблице темпа - это то, с чем я бы пошел.

+0

Это был самый простой и быстрый способ получить результаты, которые мне нужны. –

6

Добавить WITH ROLLUP в конец вашего запроса. Это даст вам сводные строки для каждой группировки. Вы можете добавить дополнительный столбец, используя функцию GROUPING (column), чтобы определить, является ли строка сверткой или нет.

MSDN example:

SELECT CASE WHEN (GROUPING(Item) = 1) THEN 'ALL' 
      ELSE ISNULL(Item, 'UNKNOWN') 
     END AS Item, 
     CASE WHEN (GROUPING(Color) = 1) THEN 'ALL' 
      ELSE ISNULL(Color, 'UNKNOWN') 
     END AS Color, 
     SUM(Quantity) AS QtySum 
FROM Inventory 
GROUP BY Item, Color WITH ROLLUP 
 
Item     Color    QtySum      
-------------------- -------------------- -------------------------- 
Chair    Blue     101.00      
Chair    Red     210.00      
Chair    ALL     311.00      
Table    Blue     124.00      
Table    Red     223.00      
Table    ALL     347.00      
ALL     ALL     658.00      
+0

Не знал, что один :-) +1. К сожалению, моя заявка по группе включает в себя кучу элементов, которые необязательно сгруппированы или суммированы. Если есть способ свернуть только определенные поля, которые были бы превосходными. –

1
WITH data AS 
     (
     SELECT 1 AS id, 1 AS value 
     UNION ALL 
     SELECT 1 AS id, 2 AS value 
     UNION ALL 
     SELECT 2 AS id, 5 AS value 
     ) 
SELECT id, COUNT(*) AS cnt, AVG(VALUE) AS a 
FROM data 
GROUP BY id WITH ROLLUP 

Этот запрос возвращает дополнительную строку с NULL в id поле и superaggregates в соответствующих полях.

0

ROLLUP, упомянутый в других ответах, очень полезен, но стыдно, что COMPUTE устарел.

Это дает отдельный результирующий набор после основного, поэтому вам не нужно отделять резюме на клиенте.

Тем не менее, он все еще в SQL Server 2008, так что есть несколько лет, чтобы жить еще ...

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