2010-10-14 4 views
1

Я запускаю запрос ниже и должен включать общее число внизу, но не уверен, как его запустить в SQL SERVER. (Я могу скопировать данные и сделать автоматическую сумму в Excel, но это немного повторяется) Может кто-нибудь, пожалуйста, помогите?Подсчет агрегата в SQL Server или ORACLE

SELECT 
LOCATION, 
SUM(CASE WHEN my_date >= '10/1/2009' AND my_date <'01/01/2010' THEN QTY 
    ELSE NULL END) AS QTR1, 

SUM(CASE WHEN my_date >= '01/1/2010' AND my_date <'04/01/2010' THEN QTY 
    ELSE NULL END) AS QTR2, 

SUM(CASE WHEN my_date >= '04/1/2010' AND my_date <'07/01/2010' THEN QTY 
    ELSE NULL END) AS QTR3, 

SUM(CASE WHEN my_date >= '07/1/2010' AND my_date <'10/01/2010' THEN QTY 
    ELSE NULL END) AS QTR4 
FROM MYTABLE 
GROUP BY location 



Location QTR1 QTR2 QTR3 QTR4 
FL 171  174  99  177 
MD 662  640  422  497 
VA 2,713 4,454 3,062 2,793 
NY 479  380  227  477 
PA 7,197 10,078  5,625 6,448 
NJ 2,626 3,848 2,428 2,089 
TOTAL ??? ??? ??? ??? 
+1

Если вы разместите код или XML, ** пожалуйста ** выделить эти строки в текстовом редакторе и нажмите на кнопку «Код» (101 010) на панели инструментов редактора для красиво формат и синтаксис выделить его! –

ответ

1

ли GROUP BY LOCATION WITH ROLLUP делать то, что вам нужно?

;WITH MYTABLE AS 
(
SELECT 'FL' AS LOCATION,CAST('10/1/2009' AS DATETIME) AS my_date, 1 AS QTY UNION ALL 
SELECT 'MD' AS LOCATION,'10/1/2009' AS my_date, 27 AS QTY UNION ALL 
SELECT 'MD' AS LOCATION,'01/1/2010' AS my_date, 1024 AS QTY UNION ALL 
SELECT 'FL' AS LOCATION,'07/1/2010' AS my_date, 98 AS QTY UNION ALL 
SELECT 'FL' AS LOCATION,'07/1/2010' AS my_date, 5 AS QTY 
) 
SELECT 
COALESCE(LOCATION,'TOTAL'), 
SUM(CASE WHEN my_date >= '10/1/2009' AND my_date <'01/01/2010' THEN QTY 
    ELSE NULL END) AS QTR1, 
SUM(CASE WHEN my_date >= '01/1/2010' AND my_date <'04/01/2010' THEN QTY 
    ELSE NULL END) AS QTR2, 
SUM(CASE WHEN my_date >= '04/1/2010' AND my_date <'07/01/2010' THEN QTY 
    ELSE NULL END) AS QTR3, 
SUM(CASE WHEN my_date >= '07/1/2010' AND my_date <'10/01/2010' THEN QTY 
    ELSE NULL END) AS QTR4 
FROM MYTABLE 
GROUP BY LOCATION WITH ROLLUP 

Возвращает

 QTR1  QTR2  QTR3  QTR4 
----- ----------- ----------- ----------- ----------- 
FL 1   NULL  NULL  103 
MD 27   1024  NULL  NULL 
TOTAL 28   1024  NULL  103 
0

Я думаю, что вариант этого должен работать. Просто удалите группировку по местоположению и использовать этот запрос:

SELECT SUM(CASE WHEN my_date >= '10/1/2009' AND my_date <'01/01/2010' THEN QTY ELSE NULL END) AS QTR1, 

SUM(CASE WHEN my_date >= '01/1/2010' AND my_date <'04/01/2010' THEN QTY ELSE NULL END) AS QTR2, 

SUM(CASE WHEN my_date >= '04/1/2010' AND my_date <'07/01/2010' THEN QTY ELSE NULL END) AS QTR3, 

SUM(CASE WHEN my_date >= '07/1/2010' AND my_date <'10/01/2010' THEN QTY ELSE NULL END) AS QTR4 FROM MYTABLE 
Смежные вопросы