Fórum Select complicada #57973
12/03/2007
0
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
Curtir tópico
+ 0Posts
12/03/2007
Dadonas
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
Gostei + 0
12/03/2007
Neto
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
Gostei + 0
12/03/2007
Emerson Nascimento
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
Gostei + 0
12/03/2007
Neto
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
Gostei + 0
13/03/2007
Neto
Obrigado novamente.
Neto
Gostei + 0
13/03/2007
Facc
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
Gostei + 0
13/03/2007
Neto
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 3, char 8.
Mvp_Operacao.
Neto
Gostei + 0
13/03/2007
Emerson Nascimento
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.
Gostei + 0
13/03/2007
Aerreira
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
Gostei + 0
13/03/2007
Neto
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.
Gostei + 0
13/03/2007
Motta
select * from tabela para ver se é problema de configuração ?
Gostei + 0
14/03/2007
Neto
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
Gostei + 0
14/03/2007
Weber
select Lot_Id, sum(Mvp_Qtde) As TotEntrada FROM MOVESTOQUE Group by 1
Gostei + 0
14/03/2007
Neto
Porque rodou ao colocarmos Group By 1
Abraços
Neto
Gostei + 0
14/03/2007
Aerreira
Ué... rodou mas não serve aos seus propósitos... ou serve?
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)