Fórum Retornar os dados como 0 caso não tenho registro no período #461777
22/11/2013
0
Há meses em que ele não efetuou nenhuma venda. Nesses meses em que ele não efetuou nenhuma venda, retornaria o valor 0 (zero) em VENDIDO.
Estou tentando efetuar esse retorno mas não estou conseguindo.
Segue o sql abaixo:
SELECT F.FUNC_NOME NOME, SUM(V.VDA_VALOR) VENDIDO, CASE EXTRACT (MONTH FROM V.VDA_DATA) WHEN 1 THEN TRIM('Janeiro') WHEN 2 THEN
'Fevereiro' WHEN 3 THEN 'Março' WHEN 4 THEN 'Abril' WHEN 5 THEN 'Maio' WHEN 6 THEN 'Junho' WHEN 7 THEN 'Julho' WHEN 8 THEN 'Agosto' WHEN 9
THEN 'Setembro' WHEN 10 THEN 'Outubro' WHEN 11 THEN 'Novembro' WHEN 12 THEN 'Dezembro' END AS MES, EXTRACT(MONTH FROM V.VDA_DATA)
AS MES_NUMERIC FROM VENDA V, VENDA_ITENS I, FUNCIONARIO F WHERE V.FUNC_ID = F.FUNC_ID AND V.VDA_ID = I.VDA_ID AND V.VDA_TIPODOC <> 'OR' AND
V.VDA_SITUACAO = 'RB' AND EXTRACT(MONTH FROM V.VDA_DATA) >= 1 AND EXTRACT(MONTH FROM V.VDA_DATA) <= 12 AND V.FUNC_ID = 43 AND
EXTRACT(YEAR FROM V.VDA_DATA) = 2013 GROUP BY NOME, MES, MES_NUMERIC ORDER BY MES_NUMERIC, VENDIDO DESC;Exemplo do retorno:
NOME VENDIDO MES MES_NUMERIC
PEDRO 130.000,00 JANEIRO 1
PEDRO 0,00 FEVEREIRO 2
PEDRO 156.000,00 MARÇO 3
PEDRO 88.000,00 ABRIL 4
. . . .
. . . .
. . . .
Atenciosamente,
Marcelo Hakenhoar.
Marcelo Hakenhoar
Curtir tópico
+ 0Posts
22/11/2013
Deivison Melo
Ficando:
coalesce(VENDIDO,0)
SELECT F.FUNC_NOME NOME, SUM(V.VDA_VALOR) coalesce(VENDIDO,0) VENDIDO, CASE EXTRACT (MONTH FROM V.VDA_DATA) WHEN 1 THEN TRIM('Janeiro') WHEN 2 THEN
'Fevereiro' WHEN 3 THEN 'Março' WHEN 4 THEN 'Abril' WHEN 5 THEN 'Maio' WHEN 6 THEN 'Junho' WHEN 7 THEN 'Julho' WHEN 8 THEN 'Agosto' WHEN 9
THEN 'Setembro' WHEN 10 THEN 'Outubro' WHEN 11 THEN 'Novembro' WHEN 12 THEN 'Dezembro' END AS MES, EXTRACT(MONTH FROM V.VDA_DATA)
AS MES_NUMERIC FROM VENDA V, VENDA_ITENS I, FUNCIONARIO F WHERE V.FUNC_ID = F.FUNC_ID AND V.VDA_ID = I.VDA_ID AND V.VDA_TIPODOC <> 'OR' AND
V.VDA_SITUACAO = 'RB' AND EXTRACT(MONTH FROM V.VDA_DATA) >= 1 AND EXTRACT(MONTH FROM V.VDA_DATA) <= 12 AND V.FUNC_ID = 43 AND
EXTRACT(YEAR FROM V.VDA_DATA) = 2013 GROUP BY NOME, MES, MES_NUMERIC ORDER BY MES_NUMERIC, VENDIDO DESC;
Qualquer dúvida estou à disposição!
Gostei + 0
25/11/2013
Marcelo Hakenhoar
Gostei + 0
25/11/2013
Deivison Melo
Pois desde o firebird 1.5 eu uso esse comando e não tenho problemas!!
Qual a versão do seu firebird ?
Me manda a estrutura das tabelas e a query que eu ajusto aqui pra vc!
Muito estranho!
Verifica também a sintaxe!!
Gostei + 0
25/11/2013
Marcelo Hakenhoar
Estou fazendo um relatório de ranking de vendas conforme eu descrevi no tópico, no serviço na qual eu faço estagio. A versão que usam aqui do firebird é 2.5 e aqui só tem eu e o meu chefe como programador e ele esta viajando a negócio, não tendo como me ajudar aonde ele se encontra no momento.
Mais uma vez, obrigado pela sua ajuda.
Gostei + 0
25/11/2013
Alex Lekao
Nao sei se ele copiou o codigo na integra, mas ta faltando uma virgula antes do coalasce para separar os campos.
So para constar o que observei no codigo, caso ele tenha sido apenas copiado e colado sem fazer nenhum tipo de ajuste.
Gostei + 0
25/11/2013
Deivison Melo
Caso seja necessário farei isso sem problemas por isso pedir a estrutura das tabelas e toda a instrução SQL.
Abração e bons códigos!!!
Gostei + 0
25/11/2013
Marcelo Hakenhoar
Mas vou continuar verificando aqui as possibilidades.
Obrigado.
Gostei + 0
25/11/2013
Alex Lekao
Gostei + 0
27/11/2013
Marcelo Hakenhoar
SELECT F.FUNC_NOME NOME, SUM(V.VDA_VALOR) coalesce(VENDIDO,0) VENDIDO, CASE EXTRACT (MONTH FROM V.VDA_DATA) WHEN 1 THEN TRIM('Janeiro') WHEN 2 THEN
'Fevereiro' WHEN 3 THEN 'Março' WHEN 4 THEN 'Abril' WHEN 5 THEN 'Maio' WHEN 6 THEN 'Junho' WHEN 7 THEN 'Julho' WHEN 8 THEN 'Agosto' WHEN 9
THEN 'Setembro' WHEN 10 THEN 'Outubro' WHEN 11 THEN 'Novembro' WHEN 12 THEN 'Dezembro' END AS MES, EXTRACT(MONTH FROM V.VDA_DATA)
AS MES_NUMERIC FROM VENDA V, VENDA_ITENS I, FUNCIONARIO F WHERE V.FUNC_ID = F.FUNC_ID AND V.VDA_ID = I.VDA_ID AND V.VDA_TIPODOC <> 'OR' AND
V.VDA_SITUACAO = 'RB' AND EXTRACT(MONTH FROM V.VDA_DATA) >= 1 AND EXTRACT(MONTH FROM V.VDA_DATA) <= 12 AND V.FUNC_ID = 43 AND
EXTRACT(YEAR FROM V.VDA_DATA) = 2013 GROUP BY NOME, MES, MES_NUMERIC ORDER BY MES_NUMERIC, VENDIDO DESC;
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 2, column 51.
(.
E usando a vírgula antes do coalesce como você me informou me retornou este erro:
Dynamic SQL Error.
SQL error code = -206.
Column unknown.
VENDIDO.
At line 1, column 53.
Gostei + 0
27/11/2013
Alex Lekao
Tenta assim e ve se funciona.
coalesce(SUM(V.VDA_VALOR),0) VENDIDO
Aparentemente eh por isso.
Faz um teste ai e coloca o resultado para a gente.
A mensagem de erro esta informando que nao tem um arquivo de mensagens e que a coluna vendido nao existe.
nesta sugestao que estou te dando vc substituir o sum e o coalasce por esse codigo e faz um teste.
Vamos ver se funciona.
Abraco.
Alex - Lekao
Gostei + 0
27/11/2013
Marcelo Hakenhoar
Mas acho que eu encontrei o erro e estaria no mês quando eu puxo ele. O sql não sabe definir qual o mês que ele pertence por não ter venda neste mês e por isso não retorna.
Bom, acho que é isso.
Gostei + 0
27/11/2013
Alex Lekao
mas os erros pararam de acontecer entao?
e esse ultimo script para tentar corrigir funcionou tbm ne?
vamos ver se conseguimos analisar mais alguma coisa no codigo para tentar contornar isso. rsrsr
Gostei + 0
27/11/2013
Deivison Melo
Gostei + 0
02/12/2013
Antonio Jesus
Testei este script e funcionou perfeitamente, retornando zero.
ELECT CODCLI, coalesce(SUM(VLTOTAL),0) as VLTOTAL FROM MOVENDA WHERE DTVENDA > '01.12.2013' GROUP BY CODCLI
100+
ANT.CAROS/SP
Gostei + 0
02/12/2013
Antonio Jesus
Citação:
can't format message 13:794 -- message file C:\Windows\firebird.msg not found.
Dynamic SQL Error.
SQL error code = -206.
Column unknown.
VENDIDO.
At line 1, column 53.
Quanto a esta mensagem, copie o arquivo "firebird.msg" que esta na pasta BIN do FireBird para a pasta do IBExpert, que resolve.
No seu código esta faltando os "as Vendido" coalesce(sum(valor),0) as VENDIDO
100+
ANT.CARLOS/SP
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)