none
Select com IF RRS feed

  • Pergunta

  •  

    ola, gostaria de criar uma stored procedure q retorna-se os campos de acordo com algum if

     

    por exemplo vou varrer uma tabela de cadastro por exemplo:

     

    select codigo, nome from cadastro

     

    e conforme ele for varrendo o banco teria q testar o campo codigo em cada linha em outro bd que utilizo faria o seguinte

     

    for select codigo, nome from cadastro do

    begin

       if codigo = 1 then

       begin

    variavel = 999

       end

    end

     

    ou seja queria poder ler e retornar conforme a minha opção por exemplo if campo = "Débito" quero retornar "D" em alguma variável

     

    obrigado

    segunda-feira, 8 de outubro de 2007 23:14

Respostas

Todas as Respostas

  • tente assim

    select Case campo = 'D' THEN Débito ELSE Crédito END as operacao from tabela
    terça-feira, 9 de outubro de 2007 00:26
  • So para completar faltou '' no else

     

    Select Operacao = Case Whem Campo = 'D' Then 'Débito' Else 'Crédito' End

    From tabela ....

     

     

    Abs;

     

    terça-feira, 9 de outubro de 2007 10:20
  • Eu também, prefiro utilizar o case ao invês do IF.

    terça-feira, 9 de outubro de 2007 11:59
  •  

    Exatamente, dentro do SELECT não tem como usar IF. A única opção disponível é o CASE. O IF só pode ser usa do fora, algo assim:

     

    Code Block

    IF @X = @Y

    SELECT UmaConsulta...

    ELSE

    SELECT OutraConsulta...

     

     

     

     

    Abraço
    segunda-feira, 15 de outubro de 2007 15:10
  • Boa tarde pessoal,
    eu estou tentando fazer um select no sql server.

    select p.codpro, p.descricao,
        CASE p.qtde + s.qtde = 'null' THEN
            s.qtde
        ELSE
            p.qtde + s.qtde
        END as qtde, p.preco
    from produto p
    left join sombra_itens s on (p.codpro = s.codpro)
    group by p.codpro, p.descricao, p.qtde + s.qtde, p.preco;

    este select sem o case retorna null no campo qtde quando o produto nao está na tabela sombra_itens,
    eu gostaria que o select funcionasse assim...

    ele iria comparar o conteudo do campo, quando retornar null, ele retornasse o campo qtde da tabela produto.

    espero ter sido claro.

    obrigado.
    segunda-feira, 26 de novembro de 2007 17:15
  •  

    neste caso e melhor usar o isnull

     

     

    select isnull(campo_sombra,campo_produtos) , ---  ou seja se o campo d tabela sombra for null ele vai pegar os dados da tabela produtos caso nao seja pega da tabela sombra.

     

     

    Abs;

     

    segunda-feira, 26 de novembro de 2007 17:36
  •  

    éra isso mesmo que eu precisava..

    muito obrigado Marcelo.

    segunda-feira, 26 de novembro de 2007 17:44
  • Estou com um problema parecido, espero que possa me ajudar...

    Preciso que de acordo com o resultado de um SELECT ele me traga um retorne diferente... eh assim..

     

    IF (SELECT MAX(id) as Maior from Clientes) = null THEN

    1

    ELSE

    Maior

    END

     

    Caso tenha alguma recomendação, favor me retorne. Grato desde ja,

     

    Att, Rafael Carneiro

    terça-feira, 4 de dezembro de 2007 16:55
  •  

    Rafael,

     

     

    Ficaria assim:

     

    SELECT CASE MAX(id) WHEN null THEN '1' ELSE 'Maior' END

    FROM Clientes

     

     

    Abraço

    terça-feira, 4 de dezembro de 2007 17:04
  • E ai cara blz...
    eu aconselho vc utilizar o IFNULL

    SELECT IFNULL (MAX(id),1) FROM CLIENTES.



    SE FOR NULO ELE MOSTRA O NUMERO 1 SENÃO ELE MOSTRA O VALOR DO MAIOR ID QUE VC TEM

    NA TABELA.



    FALOW T++


    terça-feira, 4 de dezembro de 2007 17:07
  • E ai Alexandre, no seu exemplo a instrução não esta reconhecendo o valor "null" ou seja sempre me retorna e Valor "Maior"... tem alguma ideia.. ps:  ja teste o retorno de MAX(id) e realmente retorna null...

    Grato desde ja

    Att, Rafael Carneiro

    terça-feira, 4 de dezembro de 2007 17:21
  • E ai Antonio Lucas... tentei a sua dica porem me retornou o seguinte erro:

    ERROR: function ifnull(bigint, integer) does not exist
    SQL state: 42883
    Hint: No function matches the given name and argument types. You may need to add explicit type casts.

     

    Aqui não uso procedure e nem funções... Eh necessario o uso de tal...

    Grato desde ja,

    Att Rafael Carneiro

    terça-feira, 4 de dezembro de 2007 17:24
  • Ow cara.
    te passei a função errada.
    a função correta é ISNULL.

    esta função é do próprio sqlserver cara. vc pode usar ela normalmente sem ter que criar um procedure ou
    function.

    tenta isnull blz.
    faloww
    terça-feira, 4 de dezembro de 2007 17:40
  •  

    Não é ifsnull.. É ISNULL!!!!!!!!!!!!

     

    Abraço,

     

    chapolin.rio@gmail.com

    terça-feira, 4 de dezembro de 2007 17:42
  • Ops, falha minha, corrigindo:

     

    SELECT CASE WHEN MAX(id) = null THEN '1' ELSE 'Maior' END

    FROM Clientes

     

     

    Abraço

    terça-feira, 4 de dezembro de 2007 18:14
  • Grato a Todos... resolveu meu problema.... Caso precisem de ajuda em algo que esteja em meu alcance, conte comigo.

    Att,

    Rafael Carneiro

    terça-feira, 4 de dezembro de 2007 18:18
  • e ai galera, novamente aqui venho a recorrer a vcs, pra tentar resolver este problema... preciso de uma função quem retorne um valor, porem o nome do campo e o nome da tablea serão dinamicos algo como o exemplo abaixo, não sei se a sintaxe esta correta, caso tenham alguma sugestão.. por favor...

     

     

    CREATE OR REPLACE FUNCTION RetornaCodigo(Coluna varchar ,Tabela varchar ) returns bigint AS
    $BODY$
    DECLARE

     

    Col ALIAS FOR $1;
    Tab ALIAS FOR $2;
    str record ;


    BEGIN

     

    str := "SELECT CASE MAX("|| Col ||") is null WHEN true THEN 1 ELSE MAX("|| Col ||") FORM " || Tab;

     

    return str;

     

    END;
     $BODY$
    LANGUAGE 'plpgsql' VOLATILE ;

     

    ps: o problema maior eh montar a query e executala dentro da função e assim rotornar o resultado.. talvez seja simples, porem meu baixo conhecimento com procidures e functions esta em barrando, procurei na net mas não achei algo que pudesse resolver este impasse.. mas grato desde ja...

     

    Att,

    Rafael Carneiro

    segunda-feira, 17 de dezembro de 2007 11:05