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

Responder a