Fórum Retornar os dados como 0 caso não tenho registro no período #461777

22/11/2013

0

Galera estou tentando fazer um ranking de vendas na qual desejo que retorna a quantidade de vendas em dinheiro que o vendedor efetuou em cada mês no ano.
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

Marcelo Hakenhoar

Responder

Posts

22/11/2013

Deivison Melo

Você resolve isso com o comando: Coalesce...

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!

Responder

Gostei + 0

25/11/2013

Marcelo Hakenhoar

Deivison, obrigado pela sua ajuda, mas quando eu coloquei o coalesce conforme você citou, deu erro no IBExpert apontando em cima do próprio comando coalesce.
Responder

Gostei + 0

25/11/2013

Deivison Melo

Cara muito estranho isso!

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!!
Responder

Gostei + 0

25/11/2013

Marcelo Hakenhoar

Ok Deivison, vou verificar a sintaxe do comando.

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.
Responder

Gostei + 0

25/11/2013

Alex Lekao

Oi Bom dia!!!

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.

Responder

Gostei + 0

25/11/2013

Deivison Melo

Apenas sugerir o comando, não validei código algum!!

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!!!
Responder

Gostei + 0

25/11/2013

Marcelo Hakenhoar

Alex, eu também tentei colocando a vírgula antes do coalesce e deu erro também.

Mas vou continuar verificando aqui as possibilidades.

Obrigado.
Responder

Gostei + 0

25/11/2013

Alex Lekao

posta o erro, de repende da uma luz maior para resolver.
Responder

Gostei + 0

27/11/2013

Marcelo Hakenhoar

Alex, o IBExpert me retorna este erro quando uso o comando que o Deivison me informou:
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;


can't format message 13:896 -- message file C:\Windows\firebird.msg not found.
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:
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.
Responder

Gostei + 0

27/11/2013

Alex Lekao

Oi Marcelo, bom dia!!!

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
Responder

Gostei + 0

27/11/2013

Marcelo Hakenhoar

Alex, eu tentei e não retornou o valor zero em um dos meses em que uma vendedora não efetuou uma venda.

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.
Responder

Gostei + 0

27/11/2013

Alex Lekao

entendi...

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
Responder

Gostei + 0

27/11/2013

Deivison Melo

Por favor, poste o ddl das tabelas (script´s) para criarmos essas tabelas e com isso podermos corrigir a sua query.

Responder

Gostei + 0

02/12/2013

Antonio Jesus

Ola caro amigo!

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
Responder

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
Responder

Gostei + 0

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

Aceitar