Usuário com melhor resposta
Problema usando o comando case

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.00else 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
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
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 -
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 ?
-
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
-
-
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 -