Jump to content
Giuliano Santos

SLQ de estoque com Firebird

Recommended Posts

Tenho um SQL que gera para mim o meu estoque no período que eu colocar. Esse SQL esta funcionando perfeitamente. Segue exemplo:

-- Estoque dia por grade
select
    pro.cod_produto,
    pro.descricao1 as produto,
    cor.descricao as descricao_cor,
    me.tamanho,
    sum (me.quantidade) as qtd_estoque_dia,
    sum(me.empenho) as empenho_dia
from mov_estoque me
inner join produtos pro on pro.produto = me.produto and pro.tipo_prod = 'AC'
inner join cores cor on cor.cor = me.cor
where me.data <= '30.11.2018'
group by 1,2,3,4

Preciso de um que me mostre o estoque mês-a-mês e ano-a-ano e não estou conseguindo fazer.

Segue um exemplo do que tentei mais não esta batendo:

-- Estoque dia por grade
select
    extract(year from me.data) as ano,
    extract(month from me.data) as mes,
    pro.cod_produto,
    pro.descricao1 as produto,
    sum (me.quantidade) as qtd_estoque_dia
from mov_estoque me
inner join produtos pro on pro.produto = me.produto and pro.tipo_prod = 'AC'
where me.data <=    25||'.'||
                    EXTRACT(MONTH FROM me.data)||'.'||
                    EXTRACT(YEAR  FROM me.data)
group by 1,2,3,4

Existe uma forma de fazer isso?

Share this post


Link to post
Share on other sites

GROUP BY deve ter as colunas informadas, tente :

 

select
    extract(year from me.data) as ano,
    extract(month from me.data) as mes,
    pro.cod_produto,
    pro.descricao1 as produto,
    sum (me.quantidade) as qtd_estoque_dia
from mov_estoque me
inner join produtos pro on pro.produto = me.produto and pro.tipo_prod = 'AC'
where me.data <=    25||'.'||
                    EXTRACT(MONTH FROM me.data)||'.'||
                    EXTRACT(YEAR  FROM me.data)
group by extract(year from me.data),
         extract(month from me.data),
         pro.cod_produto,
         pro.descricao1 

 

Share this post


Link to post
Share on other sites
5 minutos atrás, Motta disse:

GROUP BY deve ter as colunas informadas, tente :

 


select
    extract(year from me.data) as ano,
    extract(month from me.data) as mes,
    pro.cod_produto,
    pro.descricao1 as produto,
    sum (me.quantidade) as qtd_estoque_dia
from mov_estoque me
inner join produtos pro on pro.produto = me.produto and pro.tipo_prod = 'AC'
where me.data <=    25||'.'||
                    EXTRACT(MONTH FROM me.data)||'.'||
                    EXTRACT(YEAR  FROM me.data)
group by extract(year from me.data),
         extract(month from me.data),
         pro.cod_produto,
         pro.descricao1 

 

Testei aqui, mais ainda não esta dando certo.

Por exemplo:

em 11/2018 deveria mostrar o valor de estoque 351, mais esta mostrando -113

O que eu entendi é que ele esta trazendo a soma só do mês e ano de 11/2018. Isso para cada mês e ano.

Preciso que ele traga a soma de 11/2018 para traz como esta no WHERE ("where me.data  <= ") 

ou seja:

01/2018 - mostrar soma desde 01/2018 até a primeira movimentação que é 01/2013

02/2018 - mostrar soma desde 02/2018 até a primeira movimentação que é 01/2013

03/2018 - mostrar soma desde 03/2018 até a primeira movimentação que é 01/2013

 

Assim terei o estoque correto do mês e ano

Share this post


Link to post
Share on other sites

Veja se isto ajuda , em geral isto é complicado , não tendo sql com over as vezes é melhor resolver na camada de aplicação.

Share this post


Link to post
Share on other sites
9 minutos atrás, Motta disse:

Veja se isto ajuda , em geral isto é complicado , não tendo sql com over as vezes é melhor resolver na camada de aplicação.

É, acho que vai ser pela aplicação mesmo.

 

Muito obrigado pela ajuda

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By andreluis78
      Olá a todos.
      Criei um procedimento para verificar se um usuário está cadastrado no banco de dados.
      Utilizo Firebird como BD e componentes Zeos para acessar o banco.
      Resolvi criar uma query em tempo de execução para fazer a verificação. Não dá nenhum erro, porém, quando digito o nome do usuário no Edit e clico
      no botão que executa o procedimento, ele dá ''usuário inexistente'', mesmo se o nome do usuário estiver cadastrado no banco.
       
      Segue o código:
       
      procedure Tfrm_login.SpeedButton1Click(Sender: TObject); var Qry : TZQuery; begin   Qry:=TZQuery.Create(nil);   Qry.Connection := dm_dados.ZConnection1;  //componente de conexão   Qry.SQL.Add('select codigo, nome, acessar, user, pass from clientes');   Qry.Open;   if Qry.Locate('USER',Edit1.Text,[]) then   begin     ShowMessage('usuário cadastrado');   end   else   begin     ShowMessage('usuário inexistente');     Edit1.SetFocus;   end;   FreeAndNil(Qry); end;  
      Se alguém puder ajudar agradeço desde já.
      Obrigado
    • By diegosrg
      Olá pessoal!
      Preciso de um help por favor.
      Seguinte, tenho uma base de dados abaixo e preciso incluir uma coluna com os valores acumulado do mês independente do produto.Base atual:
      YEARMONTH / PRODUTO/ VALOR 202001 /ABC / 123,00 202001 /DEF / 234,00 202002 /ABC / 289,00 202002 /GHU / 222,00  
      Com a nova coluna ficaria assim:
      YEARMONTH / PRODUTO/ VALOR / VALOR ACUMULADO 202001 /ABC / 123,00 / 357,00 202001 /DEF / 234,00 / 357,00 202002 /ABC / 289,00 / 511 202002 /GHU / 222,00 / 511  
      Alguém tem alguma dica?!
      Desde já agradeço
    • By FabianoSouza
      Pessoal, por que isso não funciona no SQL?
      SET @sql = 'SELECT ' SET @sql = @sql + @status + ' = meuCampo FROM minhaTab' EXEC(@sql) SELECT @status Preciso passar o resultado para a variável @status.
      Como faço??
    • By Diego-SLP
      Bom dia,
       
      Estou passando uma variavel via GET para uma pagina PHP e a SQL não interpreta a mesma.
       
      Se eu printar o numero é exibido, se eu colocar o valor manualmente na SQL ela funciona, porém quando coloco a variavel não exibe nenhum registro, se alguem puder me ajudar.
       
      <?php $id = $_GET['id']; echo $id; $procura = mysqli_query($con,"SELECT p.DATA,p.cod_func,f.nome,f.funcao,p.cod_etapa,p.entrada_1,p.saida_1,p.entrada_2,p.saida_2,p.entrada_3,p.saida_3 FROM rh_pontoFuncionario p, rh_funcionario f WHERE p.cod_func = f.cod AND p.cod_obra = '".$id."' ORDER BY p.id desc") or die (mysqli_error($procura)); while($row = mysqli_fetch_array($procura)){ ?> <tr role="row" class="odd table-sm"> <td class="text-center"> <?php echo date('d/m/Y',strtotime($row['DATA'])); ?> </td> <td class="text-center"><?php echo $row['cod_func'];?></td> <td class="text-center"><?php echo $row['nome'];?></td> <td class="text-center"><?php echo $row['funcao'];?></td> <td class="text-center"><?php echo $row['cod_etapa'];?></td> <td class="text-center"><?php echo $row['entrada_1'];?></td> <td class="text-center"><?php echo $row['saida_1'];?></td> <td class="text-center"><?php echo $row['entrada_2'];?></td> <td class="text-center"><?php echo $row['saida_2'];?></td> <td class="text-center"><?php echo $row['entrada_3'];?></td> <td class="text-center"><?php echo $row['saida_3'];?></td> <td class="project-actions text-center"> <a class="btn btn-warning btn-sm" href="#.php?id=<?php echo $row['id']; ?>"> <i class="fas fa-pencil-alt"> </i> </a> <a class="btn btn-danger btn-sm" href="#.php?id=<?php echo $row['id']; ?>"> <i class="fas fa-trash-alt"> </i> </a> </td> </tr> <?php }//while ?>  
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.