Como pegar de um grupo o sum total, o sum dos pagos e o sum

Firebird

17/02/2009

olá colegas

Como pegar de um grupo o sum total dos registros do grupo, o sum dos registros pagos e o sum dos registros não pagos, dado que o conjunto do grupo tem ambos registros pagos e não pagos

Eu estava tentando assim, porém não consegui passar o grupo {ano, mes} nas consulta que estou usando no lugar dos campos que fariam respectivamente o sum dos pagos e o sum dos não pagos. Colocando fixo ali o ano e o mes dá certo, porém neste caso, a sql não itera entre os grupo, pq estou passando fixo o id de um grupo

Ou teria outra forma de resolver esse problema?

SELECT EXTRACT (MONTH FROM DATAVENCIMENTO) AS MES, EXTRACT (YEAR FROM DATAVENCIMENTO) AS ANO, SUM(VALOR) AS TOTAL, (SELECT SUM(VALOR) FROM CONTA WHERE TIPO=´C´ AND FORMAPGTO=´C´ AND STATUSPREVISTO=´S´ AND EXTRACT (YEAR FROM DATAVENCIMENTO)=2008 AND EXTRACT (MONTH FROM DATAVENCIMENTO)=1 ) AS PAGOS, (SELECT SUM(VALOR) FROM CONTA WHERE TIPO=´C´ AND FORMAPGTO=´C´ AND STATUSPREVISTO=´N´ AND EXTRACT (YEAR FROM DATAVENCIMENTO) = 2008 AND EXTRACT (MONTH FROM DATAVENCIMENTO) = 1 ) AS NAOPAGOS FROM CONTA C WHERE C.TIPO=´C´ AND C.FORMAPGTO=´C´ AND C.DATAVENCIMENTO BETWEEN ´01/01/2008´ AND ´12/31/2009´ GROUP BY ANO, MES




RECONSTRUINDO PARA MOSTRAR ONDE EU PRECISO DOS IDS DOS GRUPOS

SELECT EXTRACT (MONTH FROM DATAVENCIMENTO) AS MES, EXTRACT (YEAR FROM DATAVENCIMENTO) AS ANO, SUM(VALOR) AS TOTAL, (SELECT SUM(VALOR) FROM CONTA WHERE TIPO=´C´ AND FORMAPGTO=´C´ AND STATUSPREVISTO=´S´ AND EXTRACT (YEAR FROM DATAVENCIMENTO)=AQUI_ID_ANO_DO_GRUPO AND EXTRACT (MONTH FROM DATAVENCIMENTO)=AQUI_ID_MES_DO_GRUPO ) AS PAGOS, (SELECT SUM(VALOR) FROM CONTA WHERE TIPO=´C´ AND FORMAPGTO=´C´ AND STATUSPREVISTO=´N´ AND EXTRACT (YEAR FROM DATAVENCIMENTO) = AQUI_ID_ANO_DO_GRUPO AND EXTRACT (MONTH FROM DATAVENCIMENTO) = AQUI_ID_MES_DO_GRUPO ) AS NAOPAGOS FROM CONTA C WHERE C.TIPO=´C´ AND C.FORMAPGTO=´C´ AND C.DATAVENCIMENTO BETWEEN ´01/01/2008´ AND ´12/31/2009´ GROUP BY ANO, MES



Qualquer ajuda/dica será bem-vinda

Grato

Delmar


Delmar

Delmar

Curtidas 0

Respostas

Delmar

Delmar

17/02/2009

Reenviando formatado

SELECT EXTRACT (MONTH FROM DATAVENCIMENTO) AS MES, EXTRACT (YEAR FROM DATAVENCIMENTO) AS ANO,
       SUM(VALOR) AS TOTAL,
       (SELECT SUM(VALOR) FROM CONTA WHERE TIPO=´C´ AND FORMAPGTO=´C´ AND STATUSPREVISTO=´S´ AND
             EXTRACT (YEAR FROM DATAVENCIMENTO)=2008  AND
             EXTRACT (MONTH FROM DATAVENCIMENTO)=1 ) AS PAGOS,
       (SELECT SUM(VALOR) FROM CONTA WHERE TIPO=´C´ AND FORMAPGTO=´C´ AND STATUSPREVISTO=´N´ AND
             EXTRACT (YEAR FROM DATAVENCIMENTO) = 2008 AND
             EXTRACT (MONTH FROM DATAVENCIMENTO) = 1 ) AS NAOPAGOS
FROM
 CONTA C WHERE C.TIPO=´C´ AND C.FORMAPGTO=´C´ AND  C.DATAVENCIMENTO BETWEEN ´01/01/2008´ AND ´12/31/2009´
GROUP BY ANO, MES





SELECT EXTRACT (MONTH FROM DATAVENCIMENTO) AS MES, EXTRACT (YEAR FROM DATAVENCIMENTO) AS ANO,
       SUM(VALOR) AS TOTAL,
       (SELECT SUM(VALOR) FROM CONTA WHERE TIPO=´C´ AND FORMAPGTO=´C´ AND STATUSPREVISTO=´S´ AND
             EXTRACT (YEAR FROM DATAVENCIMENTO)=AQUI_ID_ANO_DO_GRUPO  AND
             EXTRACT (MONTH FROM DATAVENCIMENTO)=AQUI_ID_MES_DO_GRUPO ) AS PAGOS,
       (SELECT SUM(VALOR) FROM CONTA WHERE TIPO=´C´ AND FORMAPGTO=´C´ AND STATUSPREVISTO=´N´ AND
             EXTRACT (YEAR FROM DATAVENCIMENTO) = AQUI_ID_ANO_DO_GRUPO AND
             EXTRACT (MONTH FROM DATAVENCIMENTO) = AQUI_ID_MES_DO_GRUPO ) AS NAOPAGOS
FROM
 CONTA C WHERE C.TIPO=´C´ AND C.FORMAPGTO=´C´ AND  C.DATAVENCIMENTO BETWEEN ´01/01/2008´ AND ´12/31/2009´
GROUP BY ANO, MES



GOSTEI 0
Delmar

Delmar

17/02/2009

Resolvido


Compartilhando a solução


Código:
SELECT EXTRACT (MONTH FROM DATAVENCIMENTO) AS MES, EXTRACT (YEAR FROM DATAVENCIMENTO) AS ANO,
       SUM(VALOR) AS TOTAL,
       SUM((CASE WHEN STATUSPREVISTO = ´S´ THEN VALOR ELSE 0 END)) AS RECEBIDOS,
       SUM((CASE WHEN STATUSPREVISTO = ´N´ THEN VALOR ELSE 0 end)) AS NAORECEBIDOS
FROM
 CONTA C WHERE C.TIPO=´C´ AND C.FORMAPGTO=´C´ AND  C.DATAVENCIMENTO BETWEEN ´01/01/2008´ AND ´12/31/2009´
GROUP BY ANO, MES




Pesquisei aqui mesmo por ´case group by´ com todas as palavras e encontrei neste tópico

[url]http://forum.devmedia.com.br/viewtopic.php?t=91662&highlight=case+group[/url]



Feliz domingo pra nós


GOSTEI 0
POSTAR