GARANTIR DESCONTO

Fórum Select complicada #57973

12/03/2007

0

:?: Olá a todos,
Uso Delphi 7 + Firebid + DbExpress.
Tenho um cadastro de Lotes de produção onde registro diariamente a produção de postes pre-fabricados no dia.
Na movimentação do estoque de produtos (postes), preciso informar o código do poste e o lote de produção ao qual este pertence.
Quero montar um select que mostre num DbGrid o seguinte:
Abaixo os Campos:
Nro_Lote -> Lot_Id
Cod_Produto -> Prd_Cod
E/S -> Mvp_Operacao
Qtde -> Mvp_Qtde
Entrada ->Soma dos registros de entrada
Saida -> Soma dos registros de saida
NroLote----Cod.Prd--E/S----Qtde----Entrada----Saida
050307---- 01-002 E 5 5
050307---- 01-002 S 1 0 1
050307---- 01-002 S 2 0 2
...
Minha select que não funciona
=====
SELECT A.Lot_Cod, A.Lot_Id, A.Lot_Qtde, A.Prd_Cod,
Count(if (Mvp_Operacao=´E´ then Mvp_Qtde else 0)) as TotEntrada,
Count(if (Mvp_Operacao=´S´ then Mvp_Qtde else 0)) as TotSaida
FROM MOVESTOQUE A
...
Pois é quero criar duas colunas no DbGrid que mostre o total informado de entradas e outra coluna com o total informado de saidas.

Abraços a todos
Neto


Neto

Neto

Responder

Posts

12/03/2007

Dadonas

Neto, se eu entendi direito, a sentença vai ficar +- assim:


select Lot_Cod, Lot_Id, Lot_Qtde, Prd_Cod,
         sum(TotEntrada) TotEntrada,
         sum(TotSaida) TotSaida
from
  (SELECT A.Lot_Cod, A.Lot_Id, A.Lot_Qtde, A.Prd_Cod,
   Mvp_Qtde TotEntrada, 0 TotSaida
   where Mvp_Operacao=´E´
   FROM MOVESTOQUE A 

   union

   SELECT A.Lot_Cod, A.Lot_Id, A.Lot_Qtde, A.Prd_Cod,
   0 TotEntrada, Mvp_Qtde TotSaida
   where Mvp_Operacao=´S´
   FROM MOVESTOQUE A
  ) 
group by Lot_Cod, Lot_Id, Lot_Qtde, Prd_Cod


Abraço


Responder

Gostei + 0

12/03/2007

Neto

:?: Olá Dadonas, obrigado pelo interesse em ajudar.
Testei o codigo e não rodou, preciso é somar o campo Mvp_Qtde da tabela MOVESTOQUE, quando a operação (MVP_OPERACAO) é igual ´E´ somar na variavel virtual TotEntrada quando a operação é igual ´S´ somar na variavel virtual TotSaida.
Obrigado
Neto


Responder

Gostei + 0

12/03/2007

Emerson Nascimento

talves isso resolva:
SELECT
  A.Lot_Cod, A.Lot_Id, A.Lot_Qtde, A.Prd_Cod,
  sum(case when Mvp_Operacao=´E´ then A.Mvp_Qtde else 0 end) TotEntrada,
  sum(case when Mvp_Operacao=´S´ then A.Mvp_Qtde else 0 end) TotSaida
FROM
  MOVESTOQUE A
Group by
  A.Lot_Cod, A.Lot_Id, A.Lot_Qtde, A.Prd_Cod



Responder

Gostei + 0

12/03/2007

Neto

Não rodou
Testando no Sql Editor do IB Expert abaixo o erro reportado:

Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 2, char 8.
When.

Quando executada a aplicação o erro é:
Token Unknown - Line 1, Char 52 When

Será que ele entende o comando Case when??
Uso Firibird + DBExpress

Abraços
Neto


Responder

Gostei + 0

13/03/2007

Neto

Curioso, pesquisei diversos post´s usando case when e aparentemente funcionaram, onde poderá estar o meu problema???
Obrigado novamente.
Neto


Responder

Gostei + 0

13/03/2007

Facc

Experimente assim

SELECT
A.Lot_Cod, A.Lot_Id, A.Lot_Qtde, A.Prd_Cod,
sum(case Mvp_Operacao when ´E´ then A.Mvp_Qtde else 0 end) TotEntrada,
sum(case Mvp_Operacao when ´S´ then A.Mvp_Qtde else 0 end) TotSaida
FROM
MOVESTOQUE A
Group by
A.Lot_Cod, A.Lot_Id, A.Lot_Qtde, A.Prd_Cod


Responder

Gostei + 0

13/03/2007

Neto

Declarei Mvp_operacao no select mas mesmo assim apresenta:

Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 3, char 8.
Mvp_Operacao.

Neto


Responder

Gostei + 0

13/03/2007

Emerson Nascimento

qual a versão do Firebird ?
Se estiver usando a 2.0, sugiro que faça o downgrade para a versão 1.5.x, pois a versão 2 ainda é RC (release candidate) e ainda não deve ser usada em ambiente de produção.


Responder

Gostei + 0

13/03/2007

Aerreira

Acho que um pequeno ajuste no código do Dadonas resolve:

select Lot_Cod, Lot_Id, Lot_Qtde, Prd_Cod, 
         sum(Mvp_Qtde) as TotEntrada, 
         sum(Mvp_Qtde) as TotSaida 
from 
  (SELECT A.Lot_Cod, A.Lot_Id, A.Lot_Qtde, A.Prd_Cod, A.Mvp_Qtde, A.Mvp_Operacao
   where A.Mvp_Operacao=´E´ 
   FROM MOVESTOQUE A 

   union 

   SELECT A.Lot_Cod, A.Lot_Id, A.Lot_Qtde, A.Prd_Cod, A.Mvp_Qtde, A.Mvp_Operacao
   where A.Mvp_Operacao=´S´ 
   FROM MOVESTOQUE A 
  ) 
group by Lot_Cod, Lot_Id, Lot_Qtde, Prd_Cod 



Responder

Gostei + 0

13/03/2007

Neto

Uso Firebird 1.5
Quanto a sugestão do Aerreira testei com Ib Expert a SQL:

select A.Lot_Id, A.Mvp_Qtde, A.Prd_CodCombinado,
sum(A.Mvp_Qtde) as TotEntrada,
sum(A.Mvp_Qtde) as TotSaida
from
(SELECT A.Lot_Id, A.Mvp_Qtde, A.Prd_CodCombinado, A.Mvp_Qtde, A.Mvp_Operacao where A.Mvp_Operacao=´E´
FROM MOVESTOQUE A

union

SELECT A.Lot_Id, A.Mvp_Qtde, A.prd_codcombinado, A.Mvp_Qtde, A.Mvp_Operacao where A.Mvp_Operacao=´S´
FROM MOVESTOQUE A
)
group by Lot_Id, Lot_Qtde, Prd_Cod


RETORNA:

Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 5, char 2.
SELECT.


Responder

Gostei + 0

13/03/2007

Motta

Já tentou um select simples do tipo
select * from tabela para ver se é problema de configuração ?


Responder

Gostei + 0

14/03/2007

Neto

Sim
Testei um select simples e roda exemplo:
select Lot_Id, Mvp_Qtde FROM MOVESTOQUE ==> Ok... retorna as duas colunas.

Assim select sum(Mvp_Qtde) As TotEntrada FROM MOVESTOQUE Ok, retorna uma coluna com a soma, mas como abaixo não roda

select Lot_Id, sum(Mvp_Qtde) As TotEntrada FROM MOVESTOQUE, quando uso SUM e adiciono uma nova coluna na SQL ele retorna erro

Invalid token.
Dynamic SQL Error.
SQL error code = -104.
user name required.

Neto


Responder

Gostei + 0

14/03/2007

Weber

select Lot_Id, sum(Mvp_Qtde) As TotEntrada FROM MOVESTOQUE
Group by 1



Responder

Gostei + 0

14/03/2007

Neto

Rodou....
Porque rodou ao colocarmos Group By 1
Abraços
Neto


Responder

Gostei + 0

14/03/2007

Aerreira

Rodou.... Porque rodou ao colocarmos Group By 1 Abraços Neto

Ué... rodou mas não serve aos seus propósitos... ou serve?


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar