Duvida com comando sql

9 respostas
eduardoluiz.ribeiro

Olá galera eu tenho duas tabelas, uma é o caixa e a outra estorno, estou usando o seguinte código para poder retornar o valor do meu caixa

Select caixa.cod_vendedor,caixa.des_transacao, nom_operador, 
count(*) qtd_vendas, sum(caixa.val_transacao - val_desconto - estorno.val_transacao) as valor
from caixa
left join operador on caixa.cod_vendedor = operador.cod_operador
left join estorno on caixa.cod_vendedor = estorno.cod_vendedor 
WHERE dat_movimento='15/01/2009' and ind_pagamento='S' and caixa.cod_loja=1
and (des_transacao ='Ordem de serviço' or des_transacao = 'venda balcao' )
group by caixa.cod_vendedor 
order by valor desc

bom o problema é que se um valor não foi extornado quando vai fazer a somatória volta um valor null, eu queria saber se tem como eu fazer essa conta e o meu estorno.val_transacao assumir zero quando não fosse encontrado nada na tabela de estornos
valew!

9 Respostas

L

utiliza o ISNULL…

ele substitui quando é null por algum valor especificado, tipo

quando o valor for nulo ele irá substituir por zero, adapta na sua query isso pra ver se funciona

mas sobre o comando em: http://msdn.microsoft.com/pt-br/library/ms184325.aspx

abraço :lol:

eduardoluiz.ribeiro

olá LuanMelo, obrigado pela força, mas o comando não é aceito, quando eu coloco

isnull(estorno.val_transacao,0)

da um erro porém quando eu tiro o “,0” funciona a função só que n retorna oque eu queria
na verdade eu precisaria mais na parte que tem o

sum(caixa.val_transacao - val_desconto - estorno.val_transacao) as valor

para substituir esse estorno.val_estorno por 0 quando ele for nulo
não tem uma forma de usar um operador ternário em sql n?

lucamartins

Cara, o isnull deve solucionar o seu problema.
No create table qual é tipo de val_transacao na tabela Estorno?

Tente assim: 1. isnull(estorno.val_transacao,"0")
Se chiar por causa das aspas duplas tente usar as aspas simples.

At,

Luca

eduardoluiz.ribeiro

ixi não deu não, e eu tentei de todas as maneiras, inclusive o isnull(estorno.val_transacao,0) não funciona sob hipótese alguma mesmo com aspa simples, dupla ou sem.
eu tentei algo do tipo

porém também sem sucesso

L

o tipo do campo é int, certo?

então não tem porque ultilizar aspas, e sim um numero inteiro mesmo

tenta acrescentando mais um parenteses…

eduardoluiz.ribeiro

eu procurei no google há um comando no oracle (NVL) que faz exatamente oque eu quero ele pega um valor nulo e substitui por um que o programador definir, n tem algo assim no MySQL?

eduardoluiz.ribeiro

opa galera, valew a ajuda mesmo, consegui resolver aqui, é só usar a função COALESCE que resove

L

opa eduardoluiz.ribeiro, que bom que consegui achar a solução, tava dando uma pesquisada e vi que essa função isnull no MySql tem outra função e não é igual no SQL Server :frowning:

e tinha achado sobre o coalesce, so estava pesquisando direito para ver se era isso mesmo, e ja vi que é

rsrs :smiley:

com seu problema acabei descobrindo outras coisas pesquinsando por ai :smiley:

lucamartins

Boa!
Eu tô na mesma do LuanMelo, respondi baseado no SQLServer. Eu disse para vc tentar colocar com aspas, pq as vezes para projetos como esse de caixa os atributos são criados como varchar para armazenar o valor referente ao crédito “C” ou debito “D”. Essa implementação é errada, mas acontece =).
Mas valeu, agora se me perguntarem do isnull do MySql eu vou saber.

Criado 15 de janeiro de 2009
Ultima resposta 16 de jan. de 2009
Respostas 9
Participantes 3