SQL - Somar Colunas
:idea: Olá a todos.
Preciso de um select que some a quantidade de entradas e quantidade de saidas de produtos lançados na Movimentação de Estoque.
A coluna MVP_OPERACAO define se é Entrada ou Saida.
Abaixo o código que retorna erro:
---
SELECT
Mvp_Cod, Lot_Id, Mvp_Qtde, Prd_CodCombinado, Mvp_Operacao,
sum(case when Mvp_Operacao=´E´ then Mvp_Qtde else 0 end) TotEntra,
sum(case when Mvp_Operacao=´S´ then Mvp_Qtde else 0 end) TotSaida
FROM
MOVESTOQUE
Group by Mvp_Cod, Lot_Id, Mvp_Qtde, Prd_CodCombinado, Mvp_Operacao
--
O erro retornado é:
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 3, char 10.
when.
Abraços e obrigado
Neto
Preciso de um select que some a quantidade de entradas e quantidade de saidas de produtos lançados na Movimentação de Estoque.
A coluna MVP_OPERACAO define se é Entrada ou Saida.
Abaixo o código que retorna erro:
---
SELECT
Mvp_Cod, Lot_Id, Mvp_Qtde, Prd_CodCombinado, Mvp_Operacao,
sum(case when Mvp_Operacao=´E´ then Mvp_Qtde else 0 end) TotEntra,
sum(case when Mvp_Operacao=´S´ then Mvp_Qtde else 0 end) TotSaida
FROM
MOVESTOQUE
Group by Mvp_Cod, Lot_Id, Mvp_Qtde, Prd_CodCombinado, Mvp_Operacao
--
O erro retornado é:
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 3, char 10.
when.
Abraços e obrigado
Neto
Neto
Curtidas 0
Respostas
Motta
19/04/2007
A sintaxe parece correta , informe :
BD,versão, como é feito o acesso etc.
Você tentou este select via alguma ferramenta de acesso direto para ver se o mesmo funciona ?
BD,versão, como é feito o acesso etc.
Você tentou este select via alguma ferramenta de acesso direto para ver se o mesmo funciona ?
GOSTEI 0
Neto
19/04/2007
Uso Delphi 7, Firebird 1.5, DbExpress
SqlDataSet, DataSetProvider, ClientDataSet, DataSource
Estou testando a SQL com o IB Expert.
Abraços
Neto
SqlDataSet, DataSetProvider, ClientDataSet, DataSource
Estou testando a SQL com o IB Expert.
Abraços
Neto
GOSTEI 0
Motta
19/04/2007
Mvp_Qtde é numérico ?
A pergunta parece tola mas alguns sistemas utilizam os campos como char para manter um padrão de multi-banco.
Se for isto o case pode estar dando erro de tipos incompatíveis.
Fiz uma query semelhante no Oracle e funcionou.
Teste a query sem o SUM
A pergunta parece tola mas alguns sistemas utilizam os campos como char para manter um padrão de multi-banco.
Se for isto o case pode estar dando erro de tipos incompatíveis.
Fiz uma query semelhante no Oracle e funcionou.
Teste a query sem o SUM
SELECT Mvp_Cod, Lot_Id, Mvp_Qtde, Prd_CodCombinado, Mvp_Operacao, (case when Mvp_Operacao=´E´ then Mvp_Qtde else 0 end) TotEntra, (case when Mvp_Operacao=´S´ then Mvp_Qtde else 0 end) TotSaida FROM MOVESTOQUE Group by Mvp_Cod, Lot_Id, Mvp_Qtde, Prd_CodCombinado, Mvp_Operacao
GOSTEI 0
Neto
19/04/2007
Ok Motta,
testei a Sql que me enviou e não rodou.
O Campo Mvp_Qtde é Inteiro.
Testando no IB Expert usando o Sql Editor o retorno é:
==
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 3, char 6.
when.
Mais uma vez obrigado
testei a Sql que me enviou e não rodou.
O Campo Mvp_Qtde é Inteiro.
Testando no IB Expert usando o Sql Editor o retorno é:
==
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 3, char 6.
when.
Mais uma vez obrigado
GOSTEI 0
Motta
19/04/2007
Não conheço FB mas acho que o problema é não suportar a sintaxe do case.
GOSTEI 0
Neto
19/04/2007
Valeu Motta,
obrigado pela ajuda,
vou continuar pesquisando,
Por o que eu consultei no Forum aparentemente a sintaxe está correta.
Muito Obrigado
Neto
obrigado pela ajuda,
vou continuar pesquisando,
Por o que eu consultei no Forum aparentemente a sintaxe está correta.
Muito Obrigado
Neto
GOSTEI 0
Facc
19/04/2007
Não conheço FB mas acho que o problema é não suportar a sintaxe do case.
O FB Suporta sim o Case, eu já usei várias vezes...
experimente mudar de
(case when Mvp_Operacao=´E´ then Mvp_Qtde else 0 end) TotEntra, (case when Mvp_Operacao=´S´ then Mvp_Qtde else 0 end) TotSaida
para
(case when Mvp_Operacao="E" then Mvp_Qtde else 0 end) TotEntra, (case when Mvp_Operacao="S" then Mvp_Qtde else 0 end) TotSaida
Resumindo... de aspas simples para dupla
GOSTEI 0
Neto
19/04/2007
:idea: Oi Facc obrigado pela ajuda.
Testei e não rodou. Coloquei uma rotina de tratamento de erros e ela retorna assim:
======
Detalhes do Erro
Usuario.....: USUARIO
Hora.........: 20/04/2007 09:28
Categoria..: EOleException
Mensagem.: Token unknown - line 1, char 66
WHEN
Unidade....: UnM2000.pas
Linha........: 905
Endereco..: 5432269
---------------------------------->>>> Intrução SQL
SELECT Lot_Id, Mvp_Qtde, Prd_CodCombinado, Mvp_Operacao, SUM(CASE WHEN MVP_OPERACAO = :Opera THEN MVP_QTDE ELSE 0 END) TOTENTRADA, FROM MOVESTOQUE A GROUP BY Lot_Id, mvp_qtde, prd_codcombinado, mvp_operacao
=== Fim do erro
*** Curioso: Na linha Mensagem, que a rotina apresenta depois da informação char 66 (na tela da aplicação apresenta um caracter estranho tipo( | ) ou como se tivesse um chr(13) para mudar de linha.
Tanto é curioso que a instrução When quando eu copiei e colei aqui no Forum a palavra When foi colocada na linha abaixo como pode ser visto acima. No normal o WHEN é mostrado a frente do char 66.
O que será que está acontecendo?
A rotina de tratamento de erro foi baseada na apresentada no site.
Abraços
Neto
Testei e não rodou. Coloquei uma rotina de tratamento de erros e ela retorna assim:
======
Detalhes do Erro
Usuario.....: USUARIO
Hora.........: 20/04/2007 09:28
Categoria..: EOleException
Mensagem.: Token unknown - line 1, char 66
WHEN
Unidade....: UnM2000.pas
Linha........: 905
Endereco..: 5432269
---------------------------------->>>> Intrução SQL
SELECT Lot_Id, Mvp_Qtde, Prd_CodCombinado, Mvp_Operacao, SUM(CASE WHEN MVP_OPERACAO = :Opera THEN MVP_QTDE ELSE 0 END) TOTENTRADA, FROM MOVESTOQUE A GROUP BY Lot_Id, mvp_qtde, prd_codcombinado, mvp_operacao
=== Fim do erro
*** Curioso: Na linha Mensagem, que a rotina apresenta depois da informação char 66 (na tela da aplicação apresenta um caracter estranho tipo( | ) ou como se tivesse um chr(13) para mudar de linha.
Tanto é curioso que a instrução When quando eu copiei e colei aqui no Forum a palavra When foi colocada na linha abaixo como pode ser visto acima. No normal o WHEN é mostrado a frente do char 66.
O que será que está acontecendo?
A rotina de tratamento de erro foi baseada na apresentada no site.
Abraços
Neto
GOSTEI 0
Neto
19/04/2007
Qual será a forma de fazer o que necessito sem usar o When.
Tenho o código abaixo que também não está rodando:
Testando no IBExpert, apresenta erro no primeiro parenteses após o From.
===
select Mvp_Cod, Lot_Id, Mvp_Qtde, Prd_CodCombinado,
sum(Mvp_Qtde) as TotEntrada,
sum(Mvp_Qtde) as TotSaida
from
(SELECT A.Mvp_Cod, 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.Mvp_Cod, 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 Mvp_Cod, Lot_Id, Mvp_Qtde, Prd_CodCombinado
Tenho o código abaixo que também não está rodando:
Testando no IBExpert, apresenta erro no primeiro parenteses após o From.
===
select Mvp_Cod, Lot_Id, Mvp_Qtde, Prd_CodCombinado,
sum(Mvp_Qtde) as TotEntrada,
sum(Mvp_Qtde) as TotSaida
from
(SELECT A.Mvp_Cod, 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.Mvp_Cod, 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 Mvp_Cod, Lot_Id, Mvp_Qtde, Prd_CodCombinado
GOSTEI 0
Alexandre
19/04/2007
Pessoal boa tarde.
Não manjo ainda de SQL, olhei os posts acima mas não consegui fazer rodar aqui...
Segue expressão...
==========================================
SELECT PREMIO_VALOR,
COUNT(DISTINCT(ID_CONTRATO)) AS CONTRATOS,
COUNT(DISTINCT(ID_CONTRATO)) * PREMIO_VALOR AS VALOR_TOTAL
FROM CONSOLIDADO
WHERE TX_REFERENCIA3 = 'CANCELADO POR INADIMPLENCIA'
AND ANO_MES_REF = '201509'
GROUP BY PREMIO_VALOR
==========================================
PREMIO_VALOR CONTRATOS VALOR_TOTAL
4,99 456 2275,44
10,99 263 2890,37
15,9 604 9603,6
19,9 2766 55043,4
Preciso somar o total das colunas CONTRATOS e VALOR_TOTAL
Desde á agradeço.
Abraço.
Não manjo ainda de SQL, olhei os posts acima mas não consegui fazer rodar aqui...
Segue expressão...
==========================================
SELECT PREMIO_VALOR,
COUNT(DISTINCT(ID_CONTRATO)) AS CONTRATOS,
COUNT(DISTINCT(ID_CONTRATO)) * PREMIO_VALOR AS VALOR_TOTAL
FROM CONSOLIDADO
WHERE TX_REFERENCIA3 = 'CANCELADO POR INADIMPLENCIA'
AND ANO_MES_REF = '201509'
GROUP BY PREMIO_VALOR
==========================================
PREMIO_VALOR CONTRATOS VALOR_TOTAL
4,99 456 2275,44
10,99 263 2890,37
15,9 604 9603,6
19,9 2766 55043,4
Preciso somar o total das colunas CONTRATOS e VALOR_TOTAL
Desde á agradeço.
Abraço.
GOSTEI 0