ju_rezende Postado Março 27, 2006 Denunciar Share Postado Março 27, 2006 olá pessoal preciso saber como usar o iif com sqlvaleu abraços... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fercosmig Postado Março 27, 2006 Denunciar Share Postado Março 27, 2006 Não existe a função IIF() no SQL Server para fazer uma decisão dinâmica em tempo de execução. Porém ela pode ser facilmente simulada utilizando a estrutura CASE do SQL Server. Por exemplo: quanto o campo T_01 da tabela TESTE possuir um valor maior que 10 será mostrado ‘muito’ caso contrário será mostrado ‘pouco’:SELECT T_00 , CASE T_01 WHEN T_01 > 10 THEN ‘muito’ELSE ‘pouco’ ENDFROM TESTEO case pode ser utilizado também na cláusula WHERE. Por exemplo: quando o valor do campo VAL_DEPOSITO for menor que zero a comparação vai ser feita baseada no campo SALDO_POUPANÇA , quando for maior ou igual a zero a comparação é feita no campo SALDO e quando o saldo for maior que 10000 a comparação é feita no campo SALDO_APP:SELECT NOME , SALDO , SALDO_POUPANÇA , SALDO_APP , VAL_DEPOSITOFROM CONTA_CORRENTEWHERE ( CASE SALDO WHEN SALDO < 0 THEN SALDO_POUPANÇAWHEN SALDO >= 0 THEN SALDOWHEN SALDO > 10000 THEN SALDO_APP ) > VAL_DEPOSITOfonte: http://www.imasters.com.br/artigo.php?cn=1235&cc=86abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 pacokaca Postado Outubro 19, 2006 Denunciar Share Postado Outubro 19, 2006 resgatando esse tópico. .pois estou com o mesmo problema..eu fiz do jeito que você sugeriu.. mas o maldit sql num acieta..ele daIncorrect syntax near '='.seja qual comparação eu usar.. se eu usar < ele daIncorrect syntax near '<'.num sei o que azer.. alguma luz? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Outubro 19, 2006 Denunciar Share Postado Outubro 19, 2006 é pra funcionar normal, que codigo você está usando?? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 pacokaca Postado Outubro 19, 2006 Denunciar Share Postado Outubro 19, 2006 valos la.. tem todo o select... ai vem o where...where t_controle_pagamento.cancelado = 0 and t_loja.status=1 and (case testewhen t_movimentacao.crediario = "0" then "5"when t_movimentacao.crediario >= 5 then "85")estou usando errado.. não entendi bem a parte do case teste..esse teste seria um campo que eu criaria?? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Outubro 19, 2006 Denunciar Share Postado Outubro 19, 2006 realmente tem uns problemas no seu case.1º faltou o END no final.2º teste não é necessariamente uma variavel, normalmente se quer fazer o case baseado num campo do banco, então na verdade é ele que entra no lugar do teste. no seu caso, por exemplo, poderia ser o campo t_movimentacao.crediario.mas na verdade, no seu caso, você não deve por nd ai, porque so se usa o campo no case quando se quer comparar usando apenas o operador =. no seu caso você quer usar >=, então não serve.exemplo, você poderia fazer assim:(case t_movimentacao.crediariowhen "0" then "5"when "5" then "85"end)[/code] esse exemplo acima seria o mesmo que [code](casewhen t_movimentacao.crediario = "0" then "5"when t_movimentacao.crediario = 5 then "85"end) mas o que você quer, acho que seria isso: (casewhen t_movimentacao.crediario = "0" then "5"when t_movimentacao.crediario >= 5 then "85"end)[/code] 3º mas na verdade, esse where vai ficar sem sentido, a não ser que o case retornasse um valor verdadeiro ou falso. exemplo, se o seu select fiasse assim: [code]where t_controle_pagamento.cancelado = 0and t_loja.status=1and (casewhen t_movimentacao.crediario = "0" then "5"when t_movimentacao.crediario >= 5 then "85"end) o resultado o case seria 5 ou 85, certo?? se a gente resolvesse o case, o select final ficaria, por exemplo, assim: where t_controle_pagamento.cancelado = 0and t_loja.status=1and "5")[/code] ou seja, sem sentido nenhum, e ainda retornaria erro. o correto seria comparar o case com alguma coisa. exemplo: [code]where t_controle_pagamento.cancelado = 0and t_loja.status=1and (casewhen t_movimentacao.crediario = "0" then "5"when t_movimentacao.crediario >= 5 then "85"end) = "5"veja se entendeu, qualquer coisa posta aí Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 pacokaca Postado Outubro 19, 2006 Denunciar Share Postado Outubro 19, 2006 entendi.. mas agora percebi que não serve para o que eu quero..vou tentar te expicar..tenho um campo frenteai eu quero que por exemplo.. quando um outro campo(no caso t_movimentacao.crediario=0).. ai frente = 0..se não.. frente = XXXXXXXX+crediario....coisa do tipo...crieo que seria para usar isso com IIF no select ainda.. acho que viajei tentando usar isso de case.. tem alguma luz pra mim??valeu.. (posso demorar um poco pra responder que vou almoçar agora.. mas volto ai já já.. hehehe =P ) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 pacokaca Postado Outubro 19, 2006 Denunciar Share Postado Outubro 19, 2006 fala kuroy..está resolvido veio..eu num tinha percebido que dava pra usar o case no select também.. usei com a sintaxe certa ai funcionou.. valeuzao mesmo =) Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
ju_rezende
olá pessoal preciso saber como usar o iif com sql
valeu abraços...
Link para o comentário
Compartilhar em outros sites
7 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.