Sql Grouping - PullRequest
       8

Sql Grouping

0 голосов
/ 27 февраля 2009

альтернативный текст http://agricam.net/test.gif

Мне нужно динамически добавить строку в SQL после изменения номера маркетолога с заголовком «Итог маркетолога», который должен добавлять только столбец «Итог». Например, после последней строки строки Marketer 22 должен быть «Итог Marketer», а затем в столбце «Итого» должно быть 1804. То же самое должно произойти после последней строки Marketer 500.

См. Изображение на http://agricam.net/test.gif

Текущий запрос:

выберите маркетолог, SubMarketer, Оценка, Всего, Преобразование (VARCHAR, дата, 101) [Дата] из SomeTable где Date> = '25.02.2009' и Date <'26.02.2009' и маркетолог в («22», «500») группировка по SubMarketer, Grade, Marketer, Date, total заказ по маркетингу </p>

Спасибо.

Ответы [ 4 ]

6 голосов
/ 27 февраля 2009

см. Использование ROLLUP для агрегирования данных в SQL

реализация:

DECLARE @SOMETABLE TABLE (SUBMARKETER INT, GRADE CHAR, MARKETER INT, 
  DATE DATETIME, TOTAL INT)
INSERT INTO @SOMETABLE
SELECT 1415, 'A', 22, '02/25/2009', 26 UNION
SELECT 1415, 'B', 22, '02/25/2009', 93 UNION
SELECT 1415, 'C', 22, '02/25/2009', 1175 UNION
SELECT 1415, 'D', 22, '02/25/2009', 510 UNION
SELECT 1169, 'B', 500, '02/25/2009', 1 UNION
SELECT 1169, 'C', 500, '02/25/2009', 3 UNION
SELECT 1393, 'C', 500, '02/25/2009', 2 UNION
SELECT 2, 'B', 500, '02/25/2009', 5 UNION
SELECT 2, 'C', 500, '02/25/2009', 111 UNION
SELECT 2, 'D', 500, '02/25/2009', 18 

SELECT 
  CASE WHEN SUBMARKETER IS NULL THEN 'Marketer Total' 
    ELSE CONVERT(VARCHAR, MARKETER) END MARKETER, 
    SUBMARKETER, GRADE, TOTAL, DATE 
  FROM (
    SELECT MARKETER, SUBMARKETER, GRADE, SUM(TOTAL) AS TOTAL, 
    CONVERT(VARCHAR,DATE,101)[DATE] 
    FROM @SOMETABLE 
    WHERE DATE >= '2/25/2009' AND DATE < '2/26/2009' 
     AND MARKETER IN ('22','500') 
    GROUP BY MARKETER, SUBMARKETER, GRADE, DATE WITH ROLLUP
)M 
WHERE M.MARKETER IS NOT NULL 
AND NOT (SUBMARKETER IS NOT NULL AND DATE IS NULL)

внимание : это будет работать нормально, если столбцы MARKETER, SUBMARKETER и DATE НЕ равны NULL. Если в таблице будут указаны значения NULL для этих полей, это станет проблемой для фильтрации бесполезной группировки.

0 голосов
/ 27 февраля 2009

Полагаю, вы также можете использовать COMPUTE SUM

0 голосов
/ 27 февраля 2009

Ответ Coldice является правильным. Если у вас нет веских причин хранить сводные данные в таблице, механизм запросов будет достаточно мощным, чтобы сделать это за вас. Можете ли вы объяснить, почему вам нужна эта строка в таблице? Это для демонстрации? Вы можете использовать функцию ROLLUP, чтобы поместить совокупные результаты в запрос, или вы можете запустить отдельный запрос, например, чтобы подсчитать итоги:

SELECT marketer, SUM(total) FROM TablenameHere GROUP BY marketer
0 голосов
/ 27 февраля 2009

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

...