Autor Tópico: [RESOLVIDO] Colocar um IF ELSE dentro do SQL  (Lida 21610 vezes)

jorgepopel

  • Expert
  • *****
  • Mensagens: 568
    • iCentro Tecnologia e Sistemas
    • Email
[RESOLVIDO] Colocar um IF ELSE dentro do SQL
« Online: Junho 21, 2013, 08:53:14 pm »
Amigos, na aplicação tenho uma tabela CATEGORIA conforme abaixo:
            codigo       int(3)
            descricao  varchar(20)
            tipo           int(1)
o campo tipo guarda numero de 1 a 9, sendo que de 1 a 7 representam Entrada e 8 e 9 representam Saida.

no filtro tenho os seguintes campos
             tipomov       select ('E','S')
             categoria     duplo select com a tabela CATEGORIA

o problema é montar o SQL para o LOOKUP do duplo select.
algo como:
         if ({tipomov} == 'E') {
                 select codigo, descricao from categoria where tipo < 8;
         } elseif ({tipomov} == 'S') {
                 select codigo, descricao from categoria where tipo > 7;
         } else {
                 select codigo, descricao from categoria;
         }

Meus conhecimentos de SQL "não alcançaram" a solução.
Tentei usar: CASE WHEN mas não deu certo pois o campo tipomov, inicia "vazio" e {tipomov} retorna "nada"

Talvez a explicação não esteja muito boa, mas o objetivo é aprender como simular uma instrução IF ELSE dentro do SQL
« Última modificação: Junho 26, 2013, 06:27:36 pm por Bernhard »

Allan Medeiros

  • Expert
  • *****
  • Mensagens: 504
    • Email
Re:Colocar um IF ELSE dentro do SQL
« Responder #1 Online: Junho 22, 2013, 06:11:37 am »
Jorge,
Da forma como vc está querendo fazer, o teu modelo de dados vai ficar dependente do código.
Eu sugiro a criação de um campo a mais na tabela para dizer se o tipo é de entrada ou saída.
[] s
Allan Medeiros
Analista de Informática
__________________________________________
Companhia de Processamento de Dados da Paraíba
medeiros@codata.pb.gov.br

Almeida

  • Expert
  • *****
  • Mensagens: 610
    • Email
Re:Colocar um IF ELSE dentro do SQL
« Responder #2 Online: Junho 22, 2013, 09:02:09 am »
Jorge se entendi bem faça mais ou menos assim.

Código: [Selecionar]
SELECT
  campos_desejado
FROM tabela
WHERE tipo between  (CASE {tipomov} WHEN 'A' THEN '8' WHEN 'B' THEN '' ELSE 999 END) AND segunda_opcao

Acima é só um exemplo, use esse CASE WHEN para montar o valor que deseja buscar, de acordo com sua necessidade monte o WHERE desejado.
Use no campo tipomovto a opção de atualizar do duplo select via ajax.

Acho que isso dá.
Boa Sorte
« Última modificação: Junho 22, 2013, 09:06:46 am por Almeida »

Att.
Eliezer Almeida
eliezeralmeidago@hotmail.com
www.infotecsoft.com.br - Modernidade e Eficiência

jorgepopel

  • Expert
  • *****
  • Mensagens: 568
    • iCentro Tecnologia e Sistemas
    • Email
Re:Colocar um IF ELSE dentro do SQL [Resolvido]
« Responder #3 Online: Junho 22, 2013, 03:40:35 pm »
Obrigado a todos pela ajuda.

Resolvido com a utilização do CASE ... WHEN

Tinha tentado antes mas como o campo {tipomov} é do filtro e se não havia sido selecionado nada, retornava vazio dai dava erro na sintaxe do sql. Resolvi colocando como padrão o valor T (de todos) para retornar 'T' se não fosse escolhido  nem 'E' nem 'S'. Dentro de aspas simples.

Dai ficou assim:
   
Código: [Selecionar]
SELECT sequencia, descricao
FROM mei_categoria
WHERE empresa = [v_codEmpresa]  and
      (CASE '{tipocateg}' WHEN 'E' THEN tipo in (1,2,3,4,5,6,9) WHEN 'P' THEN tipo in (7,8) ELSE tipo>0 END) and
      (CASE '{tipo}' WHEN 'E' THEN tipo < 8 WHEN 'S' THEN tipo > 7 ELSE tipo>0 END)
ORDER BY descricao