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
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