Em 2 de agosto de 2010 15:18, Osvaldo Kussama <osvaldo.kuss...@gmail.com> escreveu: > Em 2 de agosto de 2010 14:48, .:eliastxt:. ... <elias...@gmail.com> escreveu: >> Boa tarde pessoal, >> >> Se alguém puder me ajudar com uma sql. >> >> Tabelas: >> item(id_item, quantidade, valor, dt_hora, id_saida, id_entrada, id_material) >> material(id_material, descricao, observacao) >> saida(id_saida, id_ordemservico) >> entrada(id_entrada, id_empenho) >> >> Preciso fazer uma consulta da seguinte forma: >> >> Por exemplo: Selecionar o saldo e o quantidade de materiais para o mês 07 de >> 2010. >> >> select >> m.descricao, >> sum(i.quantidade) as quantidade, >> sum(i.valor) as valor >> from >> chamado.item i, chamado.material m >> where >> m.id_material = i.id_material >> and >> i.id_entrada is not null >> and >> i.dt_hora BETWEEN '2010-07-01' and '2010-07-31' >> group by >> m.descricao; >> >> Minha consulta retorna o seguinte: >> Descrição do material, quantidade do mês 07, valor do mês 07 >> >> Preciso adaptar a consulta para retornar o seguinte: >> Descrição do material, quantidade até mês 07, saldo até mês 07, quantidade >> do mês 07, saldo do mês 07 >> >> Ou seja, eu precisaria acrescentar no meu resultado o valor e o saldo dos >> materiais até o mês 07, para eu ter um "saldo de material anterior". >> >> É possível? Alguém saberia como fazer? >> > > > Tente: > > SELECT m.descricao, > SUM(CASE WHEN i.dt_hora < '2010-07-01'::date THEN i.quantidade > ELSE 0) END AS qtd_ate, > SUM(CASE WHEN i.dt_hora < '2010-07-01'::date THEN i.valor ELSE > 0) END AS valor_ate, > SUM(CASE WHEN i.dt_hora BETWEEN '2010-07-01'::date and > '2010-07-31'::date THEN i.quantidade ELSE 0) END AS quantidade, > SUM(CASE WHEN i.dt_hora BETWEEN '2010-07-01'::date and > '2010-07-31'::date THEN i.valor ELSE 0) END AS valor > FROM chamado.item i JOIN chamado.material m > ON(m.id_material = i.id_material) > WHERE i.id_entrada is not null AND > i.dt_hora <'2010-08-01'::date > GROUP BY m.descricao; > > Osvaldo >
Desculpe nossa falha. O ")" está no lugar errado. SELECT m.descricao, SUM(CASE WHEN i.dt_hora < '2010-07-01'::date THEN i.quantidade ELSE 0 END) AS qtd_ate, SUM(CASE WHEN i.dt_hora < '2010-07-01'::date THEN i.valor ELSE 0 END) AS valor_ate, SUM(CASE WHEN i.dt_hora BETWEEN '2010-07-01'::date and '2010-07-31'::date THEN i.quantidade ELSE 0 END) AS quantidade, SUM(CASE WHEN i.dt_hora BETWEEN '2010-07-01'::date and '2010-07-31'::date THEN i.valor ELSE 0 END) AS valor FROM chamado.item i JOIN chamado.material m ON(m.id_material = i.id_material) WHERE i.id_entrada is not null AND i.dt_hora <'2010-08-01'::date GROUP BY m.descricao; Osvaldo _______________________________________________ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral