Em Seg, 2013-06-03 às 21:03 -0300, Tiago Adami escreveu:
> Em 3 de junho de 2013 20:38, Ramiro Pamponet <roli...@oi.com.br> escreveu:
> >
> > Boa Noite Pessoal,
> >
> > Estou querendo montar um relatório no iReport para uma aplicação Java que 
> > desenvolvi para capturar a quantidade de receitas do SUS, Particulares e 
> > Total por dia, da farmácia onde trabalho. Atualmente minha aplicação 
> > apresenta o resultado da consulta ao BD em um jTextArea, de forma  
> > individual, ou seja, uma query para as Receitas SUS, outra as Receitas 
> > Particulares e uma terceira para o Total de Receitas. O que eu estou 
> > querendo fazer agora é montar um único relatório, em forma de tabela, 
> > contendo os campos DATA ; SUS ; PARTICULAR ; TOTAL. Atualmente utilizo o 
> > modelo de query abaixo descriminado, onde as linhas precedidas por "--" são 
> > as variantes da query. Existe alguma maneira de juntar todas as consultas 
> > em um único resultado, sabendo que a coluna "flg_receita" no BD recebe o 
> > valor CHAR "1" para receitas SUS e "2" para receitas Particulares. Utilizo 
> > o "distinct" para não repetir as datas e o "count" para contar as linhas 
> > contendo as regras definidas na cláusula "where" para o tipo de receita.
> >
> > QUERY:
> >
> > select distinct(dat_emissao) as Data,
> > -- count(flg_receita) as SUS,
> > -- count(flg_receita) as Particular,
> > -- count(flg_receita) as Total
> > from cadcvend where
> > -- flg_receita='1' -- SUS
> > -- flg_receita='2' -- Particular
> > -- flg_receita is not null -- Total
> > and
> > flg_excluido is null -- Eliminar Vendas Excluídas
> > -- and dat_emissao between data_ini ('yyyy-MM-dd') and data_fim 
> > ('yyyy-MM-dd')
> > group by dat_emissao
> > order by dat_emissao
> >
> 
> Não testei, mas tenta esse aí:
> 
> select dat_emissao as Data,
> SUM(CASE WHEN flg_receita='1' THEN 1 ELSE 0 END) as SUS,
> SUM(CASE WHEN flg_receita='2' THEN 1 ELSE 0 END) as PARTICULAR,
> count(flg_receita) as Total
> from cadcvend where flg_receita is not null
> and flg_excluido is null
> and dat_emissao between data_ini ('yyyy-MM-dd') and data_fim ('yyyy-MM-dd')
> group by dat_emissao
> order by dat_emissao


Ou ainda, por diversão, o truque abaixo também funcionaria:

select dat_emissao as Data,
  SUM( cast( flg_receita='1' as integer ) ) as SUS,
  SUM( cast( flg_receita='2' as integer ) ) as PARTICULAR,
  count(flg_receita) as Total
from cadcvend 
...
...
...


Isto porque o boleano true, no Postgres, é considerado 1 (um) no mundo
dos inteiros, já o boleano false é considerado 0 (zero) e por isso o
truque acima funciona. :)


[]s
-- 
Dickson S. Guedes
mail/xmpp: gue...@guedesoft.net - skype: guediz
http://guedesoft.net - http://www.postgresql.org.br
http://www.rnp.br/keyserver/pks/lookup?search=0x8F3E3C06D428D10A

Attachment: signature.asc
Description: This is a digitally signed message part

_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a