none
Comando Case dentro de outro Case RRS feed

  • Pergunta

  • Bom dia galera, estou com a seguinte duvida, desculpem pois é primeira vez que posto duvidas neste forum.

     Em um select como faço para executar um case dentro de outro case ex.

    case 

    when condicao='X' then

    case condicao='Y' then sum (coluna) end VlComissao

    end

    pois desse jeito nao consigo o resultado esperado, alguem sabe como fazer isto obrigado galera

    quinta-feira, 13 de dezembro de 2012 13:04

Respostas

  • Paulo,

    Você pode ao invés de aninhar CASES fazer com que a condição seja composta

    exemplo:

    SELECT
     SITUACAO = 
      CASE
       WHEN (CAMPO1 = X AND CAMPO2 = Y) THEN 1
       WHEN (CAMPO1 = 1 AND (CAMPO2 = 3 AND CAMPO3 IS NULL)) THEN 2
       ELSE 3
      END
    FROM 
     TABELA



    Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    quinta-feira, 13 de dezembro de 2012 13:21
  • Paula, uma opção ao inves de voce colocar case dentro de case é fazer condições no proprio case, exemplo:

    create table #temp (valor1 int, valor2 int)
    
    insert into #temp
    select 1,1
    insert into #temp
    select 1,2
    insert into #temp
    select 1,3
    insert into #temp
    select 2,2
    
    select 
    	*,
    	Case when valor1 = valor2 and valor1 = 1 then 'valore iguais e numeros iguais a 1'
    	else 'valores diferentes ou diferentes de 1' end as teste
    from #temp


    Alexandre Matayosi Conde Mauricio. Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    quinta-feira, 13 de dezembro de 2012 13:27

Todas as Respostas

  • Paulo, não vai gerar o resultado porque você está comparando a condição com o valor 'X' e dentro você verifica se esse mesmo valor é 'Y'?! A condicao não pode ser X e Y ao mesmo tempo certo?

    Abçs
    quinta-feira, 13 de dezembro de 2012 13:21
  • Paulo,

    Você pode ao invés de aninhar CASES fazer com que a condição seja composta

    exemplo:

    SELECT
     SITUACAO = 
      CASE
       WHEN (CAMPO1 = X AND CAMPO2 = Y) THEN 1
       WHEN (CAMPO1 = 1 AND (CAMPO2 = 3 AND CAMPO3 IS NULL)) THEN 2
       ELSE 3
      END
    FROM 
     TABELA



    Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    quinta-feira, 13 de dezembro de 2012 13:21
  • Paula, uma opção ao inves de voce colocar case dentro de case é fazer condições no proprio case, exemplo:

    create table #temp (valor1 int, valor2 int)
    
    insert into #temp
    select 1,1
    insert into #temp
    select 1,2
    insert into #temp
    select 1,3
    insert into #temp
    select 2,2
    
    select 
    	*,
    	Case when valor1 = valor2 and valor1 = 1 then 'valore iguais e numeros iguais a 1'
    	else 'valores diferentes ou diferentes de 1' end as teste
    from #temp


    Alexandre Matayosi Conde Mauricio. Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    quinta-feira, 13 de dezembro de 2012 13:27