ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Ajuda com SQL para Saldo [Resolvido]

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
Aggelos
Novato
Novato


Registrado: Sexta-Feira, 18 de Abril de 2008
Mensagens: 69

MensagemEnviada: Qui Mai 09, 2019 10:05 pm    Assunto: Ajuda com SQL para Saldo [Resolvido] Responder com Citação

Salve, amigos e amigas.

Tenho a seguinte tabela abaixo:


Preciso criar um saldo diminuindo as ENTRADAS dos RETORNOS

Fiz a SQL abaixo mas está dando problema na cláusula GrouBy

SQL:
select codigo_insumo, id_unidade, (quantidade - (select sum(iim2.quantidade) from insumos_itens_movimento iim2 where ((iim2.codigo_insumo = iim1.codigo_insumo) and iim2.movimento = 'RETORNO'))) saldo
from insumos_itens_movimento iim1
where iim1.movimento = 'ENTRADA'
group by iim1.codigo_insumo, iim1.id_unidade
having saldo > 0

Erro:
Invalid token.
Dynamic SQL Error.
SQL error code = @1.
Invalid expression in the @1 (not contained in either an aggregate function or the GROUP BY clause).

Se alguém puder dar uma luz, agradeço. Estou usando o Firebird 2.5


Resolvi com a SQL abaixo:
select distinct
insumos_itens_movimento.codigo_insumo,
insumos_itens_movimento.id_unidade,
(select distinct coalesce(sum(iim1.quantidade), insumos_itens_movimento.quantidade) from insumos_itens_movimento as iim1 where iim1.codigo_insumo = insumos_itens_movimento.codigo_insumo and iim1.movimento = 'ENTRADA') -
(select distinct coalesce(sum(iim2.quantidade), 0) from insumos_itens_movimento as iim2 where iim2.codigo_insumo = insumos_itens_movimento.codigo_insumo and iim2.movimento = 'RETORNO') as estoque
from
insumos_itens_movimento
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Sex Mai 10, 2019 2:54 pm    Assunto: Responder com Citação

Boa tarde,

Percebi que você colocou o "Resolvido" mas acredito que você pode obter o resultado esperado com menos leituras da tabela utilizando a query abaixo:

Código:
select
    codigo_insumo,
    id_unidade,
    sum(quantidade * case when movimento = 'ENTRADA' then 1 else -1 end) as estoque
from insumos_itens_movimento
group by
    codigo_insumo,
    id_unidade


Espero que ajude
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB