Array
(
)

Ajuda em Consulta

Andre Silveira
   - 03 nov 2004

estou usando a seguinte conculta para tentar agrupar um relatório com as somas pr mes de referncia:

SELECT numchamado,
SUM(CASE WHEN Month(dtref)=1 THEN 1 ELSE 0) AS Jan
SUM(CASE WHEN Month(dtref)=2 THEN 1 ELSE 0) AS Fev
SUM(CASE WHEN Month(dtref)=3 THEN 1 ELSE 0) AS Mar
SUM(CASE WHEN Month(dtref)=4 THEN 1 ELSE 0) AS Abr
SUM(CASE WHEN Month(dtref)=5 THEN 1 ELSE 0) AS Mai
SUM(CASE WHEN Month(dtref)=6 THEN 1 ELSE 0) AS Jun
SUM(CASE WHEN Month(dtref)=7 THEN 1 ELSE 0) AS Jul
SUM(CASE WHEN Month(dtref)=8 THEN 1 ELSE 0) AS Ago
SUM(CASE WHEN Month(dtref)=9 THEN 1 ELSE 0) AS Sete
SUM(CASE WHEN Month(dtref)=10 THEN 1 ELSE 0) AS Outu
SUM(CASE WHEN Month(dtref)=11 THEN 1 ELSE 0) AS Nov
SUM(CASE WHEN Month(dtref)=12 THEN 1 ELSE 0) AS Dez
FROM base
GROUP BY numchamado

Mas está dando o seguinte erro:
Server: Msg 170, Level 15, State 1, Line 2
Line 2: Incorrect syntax near ´)´.

O que pode estar errado ?

Andre Luis
andre@leitbom.com.br

Robertolucio
   - 03 nov 2004

Boa tarde Andre,

Tenta aí:

SELECT numchamado,
SUM(CASE WHEN Month(dtref)=1 THEN 1 ELSE 0 END) AS Jan,
SUM(CASE WHEN Month(dtref)=2 THEN 1 ELSE 0 END) AS Fev,
SUM(CASE WHEN Month(dtref)=3 THEN 1 ELSE 0 END) AS Mar,
SUM(CASE WHEN Month(dtref)=4 THEN 1 ELSE 0 END) AS Abr,
SUM(CASE WHEN Month(dtref)=5 THEN 1 ELSE 0 END) AS Mai,
SUM(CASE WHEN Month(dtref)=6 THEN 1 ELSE 0 END) AS Jun,
SUM(CASE WHEN Month(dtref)=7 THEN 1 ELSE 0 END) AS Jul,
SUM(CASE WHEN Month(dtref)=8 THEN 1 ELSE 0 END) AS Ago,
SUM(CASE WHEN Month(dtref)=9 THEN 1 ELSE 0 END) AS Sete,
SUM(CASE WHEN Month(dtref)=10 THEN 1 ELSE 0 END) AS Outu,
SUM(CASE WHEN Month(dtref)=11 THEN 1 ELSE 0 END) AS Nov,
SUM(CASE WHEN Month(dtref)=12 THEN 1 ELSE 0 END) AS Dez
FROM base
GROUP BY numchamado

Espero ter ajudado,

Att
Roberto

Andre Silveira
   - 03 nov 2004

Cara funcionou, mas estava errado.
O que eu realmente quero é o seguinte:
Quero que ele me dê as somas dos valores em cada mês, algo mais ou menos assim:
SELECT numchamado,
CASE WHEN Month(dtref)=1 THEN Sum(base.vlrbruto) ELSE 0 END) AS Jan,
CASE WHEN Month(dtref)=2 THEN Sum(base.vlrbruto) ELSE 0 END) AS Fev,
CASE WHEN Month(dtref)=3 THEN Sum(base.vlrbruto) ELSE 0 END) AS Mar,
CASE WHEN Month(dtref)=4 THEN Sum(base.vlrbruto) ELSE 0 END) AS Abr,
CASE WHEN Month(dtref)=5 THEN Sum(base.vlrbruto) ELSE 0 END) AS Mai,
CASE WHEN Month(dtref)=6 THEN Sum(base.vlrbruto) ELSE 0 END) AS Jun,
CASE WHEN Month(dtref)=7 THEN Sum(base.vlrbruto) ELSE 0 END) AS Jul,
CASE WHEN Month(dtref)=8 THEN Sum(base.vlrbruto) ELSE 0 END) AS Ago,
CASE WHEN Month(dtref)=9 THEN Sum(base.vlrbruto) ELSE 0 END) AS Sete,
CASE WHEN Month(dtref)=10 THEN Sum(base.vlrbruto) ELSE 0 END) AS Outu,
CASE WHEN Month(dtref)=11 THEN Sum(base.vlrbruto) ELSE 0 END) AS Nov,
CASE WHEN Month(dtref)=12 THEN Sum(base.vlrbruto) ELSE 0 END) AS Dez
FROM base
GROUP BY numchamado

Quero totalizar os valores dentro dos meses de referência de cada um e que ele me retorne os totais de cada numero chamado dentro de cada mês.

Num sei se consegui me expressar corretamente.

Andre Luis
andre@leitbom.com.br

Robertolucio
   - 03 nov 2004

Andre, se eu entendi é isso:
SELECT CASE WHEN Month(dtref)=1 THEN Sum(base.vlrbruto) ELSE 0 END AS Jan,
CASE WHEN Month(dtref)=2 THEN Sum(base.vlrbruto) ELSE 0 END AS Fev,
CASE WHEN Month(dtref)=3 THEN Sum(base.vlrbruto) ELSE 0 END AS Mar,
CASE WHEN Month(dtref)=4 THEN Sum(base.vlrbruto) ELSE 0 END AS Abr,
CASE WHEN Month(dtref)=5 THEN Sum(base.vlrbruto) ELSE 0 END AS Mai,
CASE WHEN Month(dtref)=6 THEN Sum(base.vlrbruto) ELSE 0 END AS Jun,
CASE WHEN Month(dtref)=7 THEN Sum(base.vlrbruto) ELSE 0 END AS Jul,
CASE WHEN Month(dtref)=8 THEN Sum(base.vlrbruto) ELSE 0 END AS Ago,
CASE WHEN Month(dtref)=9 THEN Sum(base.vlrbruto) ELSE 0 END AS Sete,
CASE WHEN Month(dtref)=10 THEN Sum(base.vlrbruto) ELSE 0 END AS Outu,
CASE WHEN Month(dtref)=11 THEN Sum(base.vlrbruto) ELSE 0 END AS Nov,
CASE WHEN Month(dtref)=12 THEN Sum(base.vlrbruto) ELSE 0 END AS Dez
FROM base
GROUP BY month(dtref)

Qualquer coisa, é só retornar

Att
Roberto

Eduardo.padilha
   - 03 nov 2004

Caro Andre Silveira.

Eu faria de uma forma mais simplificada.

SELECT MONTH(x.campo_data), SUM(x.campo_valor)
FROM Tabela X
WHERE (YEAR(x.campo_data) = 2004)
GROUP BY MONTH(x.campo_data)
ORDER BY MONTH(x.campo_data)

Obs. Retornara os meses do ano 2004 com suas respectivas somas para cada um deles, espero que ajude.