Consulta Agrupando Dia do intervalo da consulta!!

PostgreSQL

22/08/2010

Olá pessoal, estou com dificuldades para resolver este problema, já procurei pela net mas não encontrei nada que ajudasse, segue...   tenho esta consulta:  
SELECT b.nome,SUM(valor) AS valor,to_char(a.vencto,'dd/mm/yyyy') 
FROM ctreceber a
left join categfinanc b on a.categoria = b.id
WHERE (cast(a.vencto as date) >= '28/08/2010' AND 
cast(a.vencto as date) <= '11/09/2010') AND 
(a.dtrec is null) 
GROUP BY a.vencto,b.nome
order by a.vencto,b.nome
  que retornar:       categoria               valor      data -------------------------------------------------- ATENDIMENTOS        0,33  30/08/2010
ATENDIMENTOS      84,33  31/08/2010
ATENDIMENTOS      33,33  04/09/2010
gostaria de agrupar por categoria + dia e mes no mesmo registro:  vou dá um exemplo com o resultado da consulta acima: seria:         categoria               dia30AGO      dia31AGO      dia04SET ------------------------------------------------------------------------- ATENDIMENTOS                  0,33            84,33            33,33   invés de retornar 3 registros 1 para cada DATA, seria 1 registro acumulando cada dia ou data. deu pra entender né??   já fiz uma pesquisa parecida com os meses do ano, que foi facil porque os meses são fixo daí fiz com o EXTRACT YAR e MONTH,   segue um pedaço do código para os meses do ano  
 
 
categfinanc.Sql.Add('Select');
    categfinanc.Sql.Add('A.id,');
    categfinanc.Sql.Add('A.nome,');
    categfinanc.Sql.Add('TabPagoJan.PagoJan ,');
    categfinanc.Sql.Add('TabPagoFev.PagoFev ,');
    categfinanc.Sql.Add('TabPagoMar.PagoMar ,');
    categfinanc.Sql.Add('TabPagoAbr.PagoAbr ,');
    categfinanc.Sql.Add('TabPagoMai.PagoMai ,');
    categfinanc.Sql.Add('TabPagoJun.PagoJun ,');
    categfinanc.Sql.Add('TabPagoJul.Pagojul ,');
    categfinanc.Sql.Add('TabPagoAgo.PagoAgo ,');
    categfinanc.Sql.Add('TabPagoSet.PagoSet ,');
    categfinanc.Sql.Add('TabPagoOut.Pagoout ,');
    categfinanc.Sql.Add('TabPagoNov.Pagonov ,');
    categfinanc.Sql.Add('TabPagoDez.PagoDez ,');
    categfinanc.Sql.Add('TabRecJan.RecJan   ,');
    categfinanc.Sql.Add('TabRecFev.RecFev   ,');
    categfinanc.Sql.Add('TabRecMar.RecMar   ,');
    categfinanc.Sql.Add('TabRecAbr.RecAbr   ,');
    categfinanc.Sql.Add('TabRecMai.RecMai   ,');
    categfinanc.Sql.Add('TabRecJun.Recjun   ,');
    categfinanc.Sql.Add('TabRecJul.Recjul   ,');
    categfinanc.Sql.Add('TabRecAgo.RecAgo   ,');
    categfinanc.Sql.Add('TabRecSet.Recset   ,');
    categfinanc.Sql.Add('TabRecOut.Recout   ,');
    categfinanc.Sql.Add('TabRecNov.Recnov   ,');
    categfinanc.Sql.Add('TabRecDez.RecDez   ');
    categfinanc.Sql.Add('FROM categfinanc a');
 
    // pagos Janeiro
    categfinanc.sql.add('LEFT JOIN (SELECT Round(CAST(SUM(valorpago) AS NUMERIC),2) AS PagoJan  ,categoria FROM contasPagar');
    categfinanc.sql.add('WHERE (CATEGORIA = :pCateg OR :pCateg = 0) ');
    categfinanc.sql.add('AND (COALESCE(valorpago,0) <> 0)');
    categfinanc.sql.add('AND (Extract(YEAR  FROM datapagto) = :pAnoPg) ');
    categfinanc.sql.add('AND (Extract(MONTH FROM datapagto) = :pPgJan) ');
    categfinanc.sql.add('GROUP BY categoria) TabPagoJan ON A.id = TabPagoJan.categoria');
 
    // pagos Fevereiro
    categfinanc.sql.add('LEFT JOIN (SELECT Round(CAST(SUM(valorpago) AS NUMERIC),2)   AS PagoFev ,categoria FROM contasPagar');
    categfinanc.sql.add('WHERE (CATEGORIA = :pCateg OR :pCateg = 0) ');
    categfinanc.sql.add('AND (COALESCE(valorpago,0) <> 0)  ');
    categfinanc.sql.add('AND (Extract(YEAR  from datapagto) = :pAnoPg) ');
    categfinanc.sql.add('AND (Extract(Month from datapagto) = :pPgFev) ');
    categfinanc.sql.add('GROUP BY categoria) TabPagoFev ON A.id = TabPagoFev.categoria');

 // pagos Março
    categfinanc.sql.add('LEFT JOIN (SELECT Round(CAST(SUM(valorpago) AS NUMERIC),2)   AS PagoMar ,categoria FROM contasPagar');
    categfinanc.sql.add('WHERE (CATEGORIA = :pCateg OR :pCateg = 0) ');
    categfinanc.sql.add('AND (COALESCE(valorpago,0) <> 0)  ');
    categfinanc.sql.add('AND (Extract(YEAR  from datapagto) = :pAnoPg) ');
    categfinanc.sql.add('AND (Extract(Month from datapagto) = :pPgMar) ');
    categfinanc.sql.add('GROUP BY categoria) TabPagoMar ON A.id = TabPagoMar.categoria');
 
   ...  SEGUE PARA TODOS OS MESES....
 
  funcinou que foi uma beleza, mas para o problema acima citado não consegui resover.     alguem tem uma solução legal para resolver esse problema?? agradeço desde já          
Renato Muniz

Renato Muniz

Curtidas 0
POSTAR