none
Problema usando o comando case RRS feed

  • Pergunta

  • Bom dia.. estou precisando de um help na consulta abaixo... depois que uso o case para checar e arredondar o campo de notas.. jogo o resultado nessas variaveis.. PRIMEIRA_NOTA E EXAME..

    Logo abaixo preciso comparar o resultado das duas .. só que o comando case não deixa eu usar o nome dessas variaveis.. acho que estou fazendo errado.

    Alguém pode me ajudar.. segue a consulta:

    SELECT  EDISCIPLINAS.MATERIA,
            EMATALUNO.A0, EMATALUNO.F0, EMATALUNO.A14,

    Case when emataluno.a0 - convert(INT,emataluno.a0) <=0.24 Then convert(INT,emataluno.a0)-0.00

     else case when emataluno.a0-convert(INT,emataluno.a0) >=0.25 and emataluno.a0-convert(INT,emataluno.a0) <=0.49 Then convert(INT,emataluno.a0)+0.50

     else case when emataluno.a0-convert(INT,emataluno.a0) >=0.50 and emataluno.a0-convert(INT,emataluno.a0) <=0.74 Then convert(INT,emataluno.a0)+0.50

     else case when emataluno.a0-convert(INT,emataluno.a0) >=0.75 Then convert(INT,emataluno.a0)+1.00
    else convert(INT,emataluno.a0) end end end end  AS PRIMEIRA_NOTA,

    Case when EMATALUNO.A14 - convert(INT,EMATALUNO.A14) <=0.24 Then convert(INT,EMATALUNO.A14)-0.00
     else case when EMATALUNO.A14-convert(INT,EMATALUNO.A14) >=0.25 and EMATALUNO.A14-convert(INT,EMATALUNO.A14) <=0.49 Then convert(INT,EMATALUNO.A14)+0.50
     else case when EMATALUNO.A14-convert(INT,EMATALUNO.A14) >=0.50 and EMATALUNO.A14-convert(INT,EMATALUNO.A14) <=0.74 Then convert(INT,EMATALUNO.A14)+0.50
     else case when EMATALUNO.A14-convert(INT,EMATALUNO.A14) >=0.75 Then convert(INT,EMATALUNO.A14)+1.00
    else convert(INT,EMATALUNO.A14) end end end end  AS EXAME,

    CASE WHEN (PRIMEIRA_NOTA > 7) THEN PRIMEIRA_NOTA
    ELSE ((PRIMEIRA_NOTA + EXAME) / 2 ) END AS NOTA_FIM -- ele não esta deixando eu comparar desse jeito.. qual a melhor forma por favor..

          
    FROM    EDISCIPLINAS, EMATALUNO, EMATRICPL

    WHERE   EDISCIPLINAS.CODMAT = EMATALUNO.CODMAT
    AND     EDISCIPLINAS.CODMAT NOT IN (17, 18, 19, 16, 15)
    AND     EMATALUNO.PERLETIVO = 2012
    AND     EMATALUNO.CODCOLIGADA = 2
    AND     EMATRICPL.PERLETIVO = EMATALUNO.PERLETIVO
    AND     EMATRICPL.MATALUNO = EMATALUNO.MATALUNO
    AND     EMATRICPL.CODCUR = EMATALUNO.CODCUR
    AND     EMATRICPL.CODPER = EMATALUNO.CODPER
    AND     EMATRICPL.CODTUN = EMATALUNO.CODTUN
    AND     EMATRICPL.CODTUR = EMATALUNO.CODTUR


    ORDER BY EDISCIPLINAS.MATERIA

    quinta-feira, 21 de março de 2013 14:09

Respostas

  • Alopes,

    Desculpa, haviam alguns "PRIMEIRA_NOTA" perdidos que não percebi, tente desta maneira:

    SELECT
    EDISCIPLINAS.MATERIA,
    EMATALUNO.A0, EMATALUNO.F0, EMATALUNO.A14,
    
    CASE 
    	WHEN emataluno.a0 - CONVERT(INT,emataluno.a0) <=0.24
    		THEN CONVERT(INT,emataluno.a0)-0.00
    	WHEN emataluno.a0-CONVERT(INT,emataluno.a0) >=0.25 AND emataluno.a0-CONVERT(INT,emataluno.a0) <=0.49
    		THEN CONVERT(INT,emataluno.a0)+0.50
    	WHEN emataluno.a0-CONVERT(INT,emataluno.a0) >=0.50 AND emataluno.a0-CONVERT(INT,emataluno.a0) <=0.74
    		THEN CONVERT(INT,emataluno.a0)+0.50
    	WHEN emataluno.a0-CONVERT(INT,emataluno.a0) >=0.75
    		THEN CONVERT(INT,emataluno.a0)+1.00
    	ELSE CONVERT(INT,emataluno.a0) END As PRIMEIRA_NOTA,
    
    CASE
    	WHEN EMATALUNO.A14 - CONVERT(INT,EMATALUNO.A14) <=0.24
    		THEN CONVERT(INT,EMATALUNO.A14)-0.00
    	WHEN EMATALUNO.A14-CONVERT(INT,EMATALUNO.A14) >=0.25 AND EMATALUNO.A14-CONVERT(INT,EMATALUNO.A14) <=0.49
    		THEN CONVERT(INT,EMATALUNO.A14)+0.50 
    	WHEN EMATALUNO.A14-CONVERT(INT,EMATALUNO.A14) >=0.50 AND EMATALUNO.A14-CONVERT(INT,EMATALUNO.A14) <=0.74
    		THEN CONVERT(INT,EMATALUNO.A14)+0.50
    	WHEN EMATALUNO.A14-CONVERT(INT,EMATALUNO.A14) >=0.75
    		THEN CONVERT(INT,EMATALUNO.A14)+1.00
    	ELSE CONVERT(INT,EMATALUNO.A14) END As EXAME,
    
    CASE
    	WHEN (CASE 
    				WHEN emataluno.a0 - CONVERT(INT,emataluno.a0) <=0.24
    					THEN CONVERT(INT,emataluno.a0)-0.00
    				WHEN emataluno.a0-CONVERT(INT,emataluno.a0) >=0.25 AND emataluno.a0-CONVERT(INT,emataluno.a0) <=0.49
    					THEN CONVERT(INT,emataluno.a0)+0.50
    				WHEN emataluno.a0-CONVERT(INT,emataluno.a0) >=0.50 AND emataluno.a0-CONVERT(INT,emataluno.a0) <=0.74
    					THEN CONVERT(INT,emataluno.a0)+0.50
    				WHEN emataluno.a0-CONVERT(INT,emataluno.a0) >=0.75
    					THEN CONVERT(INT,emataluno.a0)+1.00
    				ELSE CONVERT(INT,emataluno.a0) END > 7)
    		THEN 
    		--======
    			CASE 
    				WHEN emataluno.a0 - CONVERT(INT,emataluno.a0) <=0.24
    					THEN CONVERT(INT,emataluno.a0)-0.00
    				WHEN emataluno.a0-CONVERT(INT,emataluno.a0) >=0.25 AND emataluno.a0-CONVERT(INT,emataluno.a0) <=0.49
    					THEN CONVERT(INT,emataluno.a0)+0.50
    				WHEN emataluno.a0-CONVERT(INT,emataluno.a0) >=0.50 AND emataluno.a0-CONVERT(INT,emataluno.a0) <=0.74
    					THEN CONVERT(INT,emataluno.a0)+0.50
    				WHEN emataluno.a0-CONVERT(INT,emataluno.a0) >=0.75
    					THEN CONVERT(INT,emataluno.a0)+1.00
    				ELSE CONVERT(INT,emataluno.a0) END
    		--=====
    ELSE ((CASE 
    				WHEN emataluno.a0 - CONVERT(INT,emataluno.a0) <=0.24
    					THEN CONVERT(INT,emataluno.a0)-0.00
    				WHEN emataluno.a0-CONVERT(INT,emataluno.a0) >=0.25 AND emataluno.a0-CONVERT(INT,emataluno.a0) <=0.49
    					THEN CONVERT(INT,emataluno.a0)+0.50
    				WHEN emataluno.a0-CONVERT(INT,emataluno.a0) >=0.50 AND emataluno.a0-CONVERT(INT,emataluno.a0) <=0.74
    					THEN CONVERT(INT,emataluno.a0)+0.50
    				WHEN emataluno.a0-CONVERT(INT,emataluno.a0) >=0.75
    					THEN CONVERT(INT,emataluno.a0)+1.00
    				ELSE CONVERT(INT,emataluno.a0) END + CASE
    	WHEN EMATALUNO.A14 - CONVERT(INT,EMATALUNO.A14) <=0.24
    		THEN CONVERT(INT,EMATALUNO.A14)-0.00
    	WHEN EMATALUNO.A14-CONVERT(INT,EMATALUNO.A14) >=0.25 AND EMATALUNO.A14-CONVERT(INT,EMATALUNO.A14) <=0.49
    		THEN CONVERT(INT,EMATALUNO.A14)+0.50 
    	WHEN EMATALUNO.A14-CONVERT(INT,EMATALUNO.A14) >=0.50 AND EMATALUNO.A14-CONVERT(INT,EMATALUNO.A14) <=0.74
    		THEN CONVERT(INT,EMATALUNO.A14)+0.50
    	WHEN EMATALUNO.A14-CONVERT(INT,EMATALUNO.A14) >=0.75
    		THEN CONVERT(INT,EMATALUNO.A14)+1.00
    	ELSE CONVERT(INT,EMATALUNO.A14) END) / 2 ) END AS NOTA_FIM
    
    
    FROM
    	EDISCIPLINAS, EMATALUNO, EMATRICPL
    WHERE
    	EDISCIPLINAS.CODMAT = EMATALUNO.CODMAT
    	AND EDISCIPLINAS.CODMAT NOT IN (17, 18, 19, 16, 15)
    	AND EMATALUNO.PERLETIVO = 2012
    	AND EMATALUNO.CODCOLIGADA = 2
    	AND EMATRICPL.PERLETIVO = EMATALUNO.PERLETIVO 
    	AND EMATRICPL.MATALUNO = EMATALUNO.MATALUNO 
    	AND EMATRICPL.CODCUR = EMATALUNO.CODCUR 
    	AND EMATRICPL.CODPER = EMATALUNO.CODPER 
    	AND EMATRICPL.CODTUN = EMATALUNO.CODTUN 
    	AND EMATRICPL.CODTUR = EMATALUNO.CODTUR
    ORDER BY
    	EDISCIPLINAS.MATERIA


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    ITIL V3 Foundation
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com

    • Marcado como Resposta alopes1972 quinta-feira, 21 de março de 2013 14:54
    quinta-feira, 21 de março de 2013 14:33
    Moderador

Todas as Respostas

  • Alopes,

    Voce não vai mesmo conseguir fazer isso!, veja que o campo PRIMEIRA_NOTA não existe efetivamente e foi um alias dado para um condição CASE, o unico momento dentro de um select que voce pode chamar uma coluna pelo alias de execução é no order by por ser a ultima ação a ser executada pelo select então as colunas ja existem, para seu select, tente desta forma:

    SELECT
    EDISCIPLINAS.MATERIA,
    EMATALUNO.A0, EMATALUNO.F0, EMATALUNO.A14,
    
    CASE 
    	WHEN emataluno.a0 - CONVERT(INT,emataluno.a0) <=0.24
    		THEN CONVERT(INT,emataluno.a0)-0.00
    	WHEN emataluno.a0-CONVERT(INT,emataluno.a0) >=0.25 AND emataluno.a0-CONVERT(INT,emataluno.a0) <=0.49
    		THEN CONVERT(INT,emataluno.a0)+0.50
    	WHEN emataluno.a0-CONVERT(INT,emataluno.a0) >=0.50 AND emataluno.a0-CONVERT(INT,emataluno.a0) <=0.74
    		THEN CONVERT(INT,emataluno.a0)+0.50
    	WHEN emataluno.a0-CONVERT(INT,emataluno.a0) >=0.75
    		THEN CONVERT(INT,emataluno.a0)+1.00
    	ELSE CONVERT(INT,emataluno.a0) END As PRIMEIRA_NOTA,
    
    CASE
    	WHEN EMATALUNO.A14 - CONVERT(INT,EMATALUNO.A14) <=0.24
    		THEN CONVERT(INT,EMATALUNO.A14)-0.00
    	WHEN EMATALUNO.A14-CONVERT(INT,EMATALUNO.A14) >=0.25 AND EMATALUNO.A14-CONVERT(INT,EMATALUNO.A14) <=0.49
    		THEN CONVERT(INT,EMATALUNO.A14)+0.50 
    	WHEN EMATALUNO.A14-CONVERT(INT,EMATALUNO.A14) >=0.50 AND EMATALUNO.A14-CONVERT(INT,EMATALUNO.A14) <=0.74
    		THEN CONVERT(INT,EMATALUNO.A14)+0.50
    	WHEN EMATALUNO.A14-CONVERT(INT,EMATALUNO.A14) >=0.75
    		THEN CONVERT(INT,EMATALUNO.A14)+1.00
    	ELSE CONVERT(INT,EMATALUNO.A14) END As EXAME,
    
    CASE
    	WHEN (PRIMEIRA_NOTA > 7)
    		THEN 
    		--======
    			CASE 
    				WHEN emataluno.a0 - CONVERT(INT,emataluno.a0) <=0.24
    					THEN CONVERT(INT,emataluno.a0)-0.00
    				WHEN emataluno.a0-CONVERT(INT,emataluno.a0) >=0.25 AND emataluno.a0-CONVERT(INT,emataluno.a0) <=0.49
    					THEN CONVERT(INT,emataluno.a0)+0.50
    				WHEN emataluno.a0-CONVERT(INT,emataluno.a0) >=0.50 AND emataluno.a0-CONVERT(INT,emataluno.a0) <=0.74
    					THEN CONVERT(INT,emataluno.a0)+0.50
    				WHEN emataluno.a0-CONVERT(INT,emataluno.a0) >=0.75
    					THEN CONVERT(INT,emataluno.a0)+1.00
    				ELSE CONVERT(INT,emataluno.a0) END
    		--=====
    ELSE ((PRIMEIRA_NOTA + EXAME) / 2 ) END AS NOTA_FIM
    
    
    FROM
    	EDISCIPLINAS, EMATALUNO, EMATRICPL
    WHERE
    	EDISCIPLINAS.CODMAT = EMATALUNO.CODMAT
    	AND EDISCIPLINAS.CODMAT NOT IN (17, 18, 19, 16, 15)
    	AND EMATALUNO.PERLETIVO = 2012
    	AND EMATALUNO.CODCOLIGADA = 2
    	AND EMATRICPL.PERLETIVO = EMATALUNO.PERLETIVO 
    	AND EMATRICPL.MATALUNO = EMATALUNO.MATALUNO 
    	AND EMATRICPL.CODCUR = EMATALUNO.CODCUR 
    	AND EMATRICPL.CODPER = EMATALUNO.CODPER 
    	AND EMATRICPL.CODTUN = EMATALUNO.CODTUN 
    	AND EMATRICPL.CODTUR = EMATALUNO.CODTUR
    ORDER BY
    	EDISCIPLINAS.MATERIA


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    ITIL V3 Foundation
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com

    quinta-feira, 21 de março de 2013 14:20
    Moderador
  • Fabrizzio bom dia

    obrigado pela dica.. mas testando do jeito que falou .. ela ainda retorna o erro..

    Mensagem 207, Nível 16, Estado 1, Linha 28
    Invalid column name 'PRIMEIRA_NOTA'.
    Mensagem 207, Nível 16, Estado 1, Linha 42
    Invalid column name 'PRIMEIRA_NOTA'.
    Mensagem 207, Nível 16, Estado 1, Linha 42
    Invalid column name 'EXAME'.

    To achando que vou ter que tentar trabalhar direto com o campo da tabela.. o que acha ?

    quinta-feira, 21 de março de 2013 14:30
  • Alopes,

    Desculpa, haviam alguns "PRIMEIRA_NOTA" perdidos que não percebi, tente desta maneira:

    SELECT
    EDISCIPLINAS.MATERIA,
    EMATALUNO.A0, EMATALUNO.F0, EMATALUNO.A14,
    
    CASE 
    	WHEN emataluno.a0 - CONVERT(INT,emataluno.a0) <=0.24
    		THEN CONVERT(INT,emataluno.a0)-0.00
    	WHEN emataluno.a0-CONVERT(INT,emataluno.a0) >=0.25 AND emataluno.a0-CONVERT(INT,emataluno.a0) <=0.49
    		THEN CONVERT(INT,emataluno.a0)+0.50
    	WHEN emataluno.a0-CONVERT(INT,emataluno.a0) >=0.50 AND emataluno.a0-CONVERT(INT,emataluno.a0) <=0.74
    		THEN CONVERT(INT,emataluno.a0)+0.50
    	WHEN emataluno.a0-CONVERT(INT,emataluno.a0) >=0.75
    		THEN CONVERT(INT,emataluno.a0)+1.00
    	ELSE CONVERT(INT,emataluno.a0) END As PRIMEIRA_NOTA,
    
    CASE
    	WHEN EMATALUNO.A14 - CONVERT(INT,EMATALUNO.A14) <=0.24
    		THEN CONVERT(INT,EMATALUNO.A14)-0.00
    	WHEN EMATALUNO.A14-CONVERT(INT,EMATALUNO.A14) >=0.25 AND EMATALUNO.A14-CONVERT(INT,EMATALUNO.A14) <=0.49
    		THEN CONVERT(INT,EMATALUNO.A14)+0.50 
    	WHEN EMATALUNO.A14-CONVERT(INT,EMATALUNO.A14) >=0.50 AND EMATALUNO.A14-CONVERT(INT,EMATALUNO.A14) <=0.74
    		THEN CONVERT(INT,EMATALUNO.A14)+0.50
    	WHEN EMATALUNO.A14-CONVERT(INT,EMATALUNO.A14) >=0.75
    		THEN CONVERT(INT,EMATALUNO.A14)+1.00
    	ELSE CONVERT(INT,EMATALUNO.A14) END As EXAME,
    
    CASE
    	WHEN (CASE 
    				WHEN emataluno.a0 - CONVERT(INT,emataluno.a0) <=0.24
    					THEN CONVERT(INT,emataluno.a0)-0.00
    				WHEN emataluno.a0-CONVERT(INT,emataluno.a0) >=0.25 AND emataluno.a0-CONVERT(INT,emataluno.a0) <=0.49
    					THEN CONVERT(INT,emataluno.a0)+0.50
    				WHEN emataluno.a0-CONVERT(INT,emataluno.a0) >=0.50 AND emataluno.a0-CONVERT(INT,emataluno.a0) <=0.74
    					THEN CONVERT(INT,emataluno.a0)+0.50
    				WHEN emataluno.a0-CONVERT(INT,emataluno.a0) >=0.75
    					THEN CONVERT(INT,emataluno.a0)+1.00
    				ELSE CONVERT(INT,emataluno.a0) END > 7)
    		THEN 
    		--======
    			CASE 
    				WHEN emataluno.a0 - CONVERT(INT,emataluno.a0) <=0.24
    					THEN CONVERT(INT,emataluno.a0)-0.00
    				WHEN emataluno.a0-CONVERT(INT,emataluno.a0) >=0.25 AND emataluno.a0-CONVERT(INT,emataluno.a0) <=0.49
    					THEN CONVERT(INT,emataluno.a0)+0.50
    				WHEN emataluno.a0-CONVERT(INT,emataluno.a0) >=0.50 AND emataluno.a0-CONVERT(INT,emataluno.a0) <=0.74
    					THEN CONVERT(INT,emataluno.a0)+0.50
    				WHEN emataluno.a0-CONVERT(INT,emataluno.a0) >=0.75
    					THEN CONVERT(INT,emataluno.a0)+1.00
    				ELSE CONVERT(INT,emataluno.a0) END
    		--=====
    ELSE ((CASE 
    				WHEN emataluno.a0 - CONVERT(INT,emataluno.a0) <=0.24
    					THEN CONVERT(INT,emataluno.a0)-0.00
    				WHEN emataluno.a0-CONVERT(INT,emataluno.a0) >=0.25 AND emataluno.a0-CONVERT(INT,emataluno.a0) <=0.49
    					THEN CONVERT(INT,emataluno.a0)+0.50
    				WHEN emataluno.a0-CONVERT(INT,emataluno.a0) >=0.50 AND emataluno.a0-CONVERT(INT,emataluno.a0) <=0.74
    					THEN CONVERT(INT,emataluno.a0)+0.50
    				WHEN emataluno.a0-CONVERT(INT,emataluno.a0) >=0.75
    					THEN CONVERT(INT,emataluno.a0)+1.00
    				ELSE CONVERT(INT,emataluno.a0) END + CASE
    	WHEN EMATALUNO.A14 - CONVERT(INT,EMATALUNO.A14) <=0.24
    		THEN CONVERT(INT,EMATALUNO.A14)-0.00
    	WHEN EMATALUNO.A14-CONVERT(INT,EMATALUNO.A14) >=0.25 AND EMATALUNO.A14-CONVERT(INT,EMATALUNO.A14) <=0.49
    		THEN CONVERT(INT,EMATALUNO.A14)+0.50 
    	WHEN EMATALUNO.A14-CONVERT(INT,EMATALUNO.A14) >=0.50 AND EMATALUNO.A14-CONVERT(INT,EMATALUNO.A14) <=0.74
    		THEN CONVERT(INT,EMATALUNO.A14)+0.50
    	WHEN EMATALUNO.A14-CONVERT(INT,EMATALUNO.A14) >=0.75
    		THEN CONVERT(INT,EMATALUNO.A14)+1.00
    	ELSE CONVERT(INT,EMATALUNO.A14) END) / 2 ) END AS NOTA_FIM
    
    
    FROM
    	EDISCIPLINAS, EMATALUNO, EMATRICPL
    WHERE
    	EDISCIPLINAS.CODMAT = EMATALUNO.CODMAT
    	AND EDISCIPLINAS.CODMAT NOT IN (17, 18, 19, 16, 15)
    	AND EMATALUNO.PERLETIVO = 2012
    	AND EMATALUNO.CODCOLIGADA = 2
    	AND EMATRICPL.PERLETIVO = EMATALUNO.PERLETIVO 
    	AND EMATRICPL.MATALUNO = EMATALUNO.MATALUNO 
    	AND EMATRICPL.CODCUR = EMATALUNO.CODCUR 
    	AND EMATRICPL.CODPER = EMATALUNO.CODPER 
    	AND EMATRICPL.CODTUN = EMATALUNO.CODTUN 
    	AND EMATRICPL.CODTUR = EMATALUNO.CODTUR
    ORDER BY
    	EDISCIPLINAS.MATERIA


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    ITIL V3 Foundation
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com

    • Marcado como Resposta alopes1972 quinta-feira, 21 de março de 2013 14:54
    quinta-feira, 21 de março de 2013 14:33
    Moderador
  • Fabrizzio

    Deu certo.. muito obrigado pela ajuda.

    Abraço

    quinta-feira, 21 de março de 2013 14:38
  • Amigo,

    Se possivel marque como "resposta" as respostas que te ajudaram para que possa ajudar outros usuarios que tiverem a mesma duvida.


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    ITIL V3 Foundation
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com

    quinta-feira, 21 de março de 2013 14:38
    Moderador
  • Ja marquei, obrigado.

    é a primeira vez que uso o fórum, não sabia.

    Mas ja fiz...valeu.

    quinta-feira, 21 de março de 2013 14:55