Ir para conteúdo
Fórum Script Brasil
  • 0

If


ju_rezende

Pergunta

7 respostass a esta questão

Posts Recomendados

  • 0

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’ END

FROM TESTE

O 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_DEPOSITO

FROM CONTA_CORRENTE

WHERE ( CASE SALDO WHEN SALDO < 0 THEN SALDO_POUPANÇA

WHEN SALDO >= 0 THEN SALDO

WHEN SALDO > 10000 THEN SALDO_APP ) > VAL_DEPOSITO

fonte: http://www.imasters.com.br/artigo.php?cn=1235&cc=86

abraços

Link para o comentário
Compartilhar em outros sites

  • 0

valos la.. tem todo o select... ai vem o where...

where t_controle_pagamento.cancelado = 0

and t_loja.status=1

and (case teste

when 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??

Link para o comentário
Compartilhar em outros sites

  • 0

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.crediario
when "0" then "5"
when "5" then "85"
end)[/code] esse exemplo acima seria o mesmo que
[code](case
when t_movimentacao.crediario = "0" then "5"
when t_movimentacao.crediario = 5 then "85"
end)
mas o que você quer, acho que seria isso:
(case
when 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 = 0
and t_loja.status=1
and (case
when 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 = 0
and t_loja.status=1
and "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 = 0
and t_loja.status=1
and (case
when t_movimentacao.crediario = "0" then "5"
when t_movimentacao.crediario >= 5 then "85"
end) = "5"

veja se entendeu, qualquer coisa posta aí

Link para o comentário
Compartilhar em outros sites

  • 0

entendi.. mas agora percebi que não serve para o que eu quero..

vou tentar te expicar..

tenho um campo frente

ai 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 )

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...