Problemas com SQL no Postgre [Resolvida]  XML
Índice dos Fóruns » Persistência: Hibernate, JPA, JDBC e outros
Autor Mensagem
gilvanandre
HelloWorld
[Avatar]

Membro desde: 25/01/2012 08:16:20
Mensagens: 13
Offline

Amigos, Estou revisando um SQL que até então estava funcionando, mas do nada o mesmo parou de funcionar. Já tentei de tudo para resolve-lo, e a unica forma de fazer funcionar é tirando o " | " das condições que estão dentro da clausula CASE "" WHEN 1 | 4 | 5 THEN.
Se eu deixar com apenas um dos dois funciona, mas até então o mesmo funcionava com os dois. E eu preciso deste SQL funcionando.
O SQL completo é o seguinte:

select distinct(produto_codigo_produto),
(sum(CASE tipooperestoque_codigo_tipo_oper_estoque
when 1 | 4 | 6 THEN e.quantidade
ELSE 0 end) -
sum(CASE tipooperestoque_codigo_tipo_oper_estoque
when 2 | 5 | 7 THEN e.quantidade
ELSE 0 end)) qtde
from estoquesetor e
join setorestab b on b.cod_setor_estab = e.setor_cod_setor_estab
where b.cod_setor_estab = 8
group by 1
HAVING
(sum(CASE tipooperestoque_codigo_tipo_oper_estoque
when 1 | 4 | 6 THEN e.quantidade
ELSE 0 end) -
sum(CASE tipooperestoque_codigo_tipo_oper_estoque
when 2 | 5 | 7 THEN e.quantidade
ELSE 0 end)) > 0


Se alguém souber uma outra maneira de realizar as condiçõesdentro da clausula CASE "" WHEN fico muito grato.
Desde já agradeço a atenção de todos.

This message was edited 2 times. Last update was at 07/02/2012 06:49:34


abmpicoli
JavaTeenager

Membro desde: 27/07/2011 09:11:25
Mensagens: 164
Offline

Carinha, pelo que entendi, seu estoque tem operações de crédito (1, 4, 6) e débito (2,5,7). Eu penso em várias soluções para simplificar seu código e torná-lo mais legível, mas todos envolvem
operações de "Data Definition" no banco.

Uma coisa que me vem a cabeça, por exemplo, é que a tabela tipoperestoque tenha um sinal indicando se a operação é crédito ou débito (o "sinal").
Aí seu SQL seria algo assim:

select distinct produto_codigo_produto, sum(e.quantidade * t.sinal) qtde
from estoquesetor e inner join <<tabela de operação de estoque>> t on e.tipooperestoque_codigo_tipo_oper_estoque = t.codigo_tipo_oper_estoque inner join setorestab b on b.cod_setor_estab = e.setor_cod_setor_estab
where b.cod_setor_estab = 8
group by 1
having (sum(e.quantidade * t.sinal)) > 0;



.x.
gilvanandre
HelloWorld
[Avatar]

Membro desde: 25/01/2012 08:16:20
Mensagens: 13
Offline

Muito obrigado pela dica.

Vou utilizar essa ideia que é muito boa.
Muito obrigado!

Abraços

 
Índice dos Fóruns » Persistência: Hibernate, JPA, JDBC e outros
Ir para:   
Powered by JForum 2.1.8 © JForum Team