Usuário com melhor resposta
Erro ao fazer um case

Pergunta
-
Boa tarde a todos, estou tentando desenvolver uma sentença SQL porem estou tendo um erro que não consigo resolver, la no case de pessoas
se eu colocar ele como esta na 1 linha WHEN PPESSOA.CORRACA = 2 THEN 'branca' ele da um erro de conversão falando que é do tipo inteiro, porem não são familiarizada com conversão de dados, como faria a conversão pra funcionar?
obrigada
SELECT DISTINCT SMATRICPL.RA, PPESSOA.NOME ALUNO,PPESSOA.CPF CPF, PPESSOA.DTNASCIMENTO NASCIMENTO,
SCURSO.NOME CURSO,SMATRICPL.PERIODO, SPLETIVO.CODPERLET,SHABILITACAOALUNO.DTINGRESSO,SINSTITUICAO.NOME ESCOLA,
CASE
WHEN SINSTITUICAO.TIPOINST = 1 THEN 'PUBLICA'
WHEN SINSTITUICAO.TIPOINST = 2 THEN 'PRIVADA'
ELSE ''
END TIPO_INSTITUICAO,
CASE
WHEN PPESSOA.CORRACA = 2 THEN 'branca'
WHEN PPESSOA.CORRACA = 6 THEN 6 /* AMARELA */
WHEN PPESSOA.CORRACA = 0 THEN 0 /* INDIGENA */
WHEN PPESSOA.CORRACA = 8 THEN 8 /* PARDA */
WHEN PPESSOA.CORRACA = 4 THEN 4 /* PPRETA */
ELSE '100'
END CORRACA,
( SELECT PPESSOA.NOME
FROM PPESSOA
WHERE PPESSOA.CODIGO = SPESSOA.CODPESSOAMAE) MAE,
CASE
WHEN PPESSOA.DEFICIENTEFISICO <> '0' THEN 'DEFICIENTE FISICO'
WHEN PPESSOA.DEFICIENTEAUDITIVO <> '0' THEN 'DEFICIENTE AUDITIVO'
WHEN PPESSOA.DEFICIENTEFALA <> '0' THEN 'DEFICIENTE FALA'
WHEN PPESSOA.DEFICIENTEVISUAL <> '0' THEN 'DEFICIENTE VISUAL'
WHEN PPESSOA.DEFICIENTEMENTAL <> '0' THEN 'DEFICIENTE MENTAL'
ELSE 'SEM DEFICIENCIA'
END DEFICIENTEFISICO
from SHABILITACAOFILIAL
inner join SCURSO on SHABILITACAOFILIAL.CODCURSO = SCURSO.CODCURSO
inner join SMATRICPL on SMATRICPL.IDHABILITACAOFILIAL = SHABILITACAOFILIAL.IDHABILITACAOFILIAL
inner join SALUNO on SALUNO.RA = SMATRICPL.RA
inner join PPESSOA on PPESSOA.CODIGO = SALUNO.CODPESSOA
inner join SPLETIVO on SPLETIVO.IDPERLET = SMATRICPL.IDPERLET
INNER JOIN SPESSOA ON SPESSOA.CODIGO = PPESSOA.CODIGO
FULL JOIN SINSTITUICAO ON SPESSOA.CODINST2GRAU = SINSTITUICAO.CODINST
INNER JOIN SHABILITACAOALUNO ON SHABILITACAOALUNO.CODCOLIGADA = SHABILITACAOFILIAL.CODCOLIGADA AND
SHABILITACAOALUNO.IDHABILITACAOFILIAL = SHABILITACAOFILIAL.IDHABILITACAOFILIAL AND
SHABILITACAOALUNO.CODCOLIGADA = SMATRICPL.CODCOLIGADA AND
SHABILITACAOALUNO.IDHABILITACAOFILIAL = SMATRICPL.IDHABILITACAOFILIAL AND
SHABILITACAOALUNO.RA = SMATRICPL.RA
WHERE SMATRICPL.CODSTATUS in (01, 02) and
SMATRICPL.PERIODO = '1' and
SPLETIVO.CODPERLET = '2013/1' and
SCURSO.CODCURSO = '4'
ORDER BY PPESSOA.NOMEsegunda-feira, 25 de março de 2013 19:44
Respostas
-
Renata, boa tarde!
Não é a coisa mais performatica do mundo mas a solução esta abaixo, fazendo a conversão para texto antes:
SELECT DISTINCT SMATRICPL.RA, PPESSOA.NOME ALUNO,PPESSOA.CPF CPF, PPESSOA.DTNASCIMENTO NASCIMENTO, SCURSO.NOME CURSO,SMATRICPL.PERIODO, SPLETIVO.CODPERLET,SHABILITACAOALUNO.DTINGRESSO,SINSTITUICAO.NOME ESCOLA, CASE WHEN SINSTITUICAO.TIPOINST = 1 THEN 'PUBLICA' WHEN SINSTITUICAO.TIPOINST = 2 THEN 'PRIVADA' ELSE '' END TIPO_INSTITUICAO, CASE WHEN CAST(PPESSOA.CORRACA AS VARCHAR(8000)) = 2 THEN 'branca' WHEN CAST(PPESSOA.CORRACA AS VARCHAR(8000)) = 6 THEN 'AMARELA' WHEN CAST(PPESSOA.CORRACA AS VARCHAR(8000)) = 0 THEN 'INDIGENA' WHEN CAST(PPESSOA.CORRACA AS VARCHAR(8000)) = 8 THEN 'PARDA' WHEN CAST(PPESSOA.CORRACA AS VARCHAR(8000)) = 4 THEN 'PPRETA' ELSE '100' END CORRACA, ( SELECT PPESSOA.NOME FROM PPESSOA WHERE PPESSOA.CODIGO = SPESSOA.CODPESSOAMAE) MAE, CASE WHEN PPESSOA.DEFICIENTEFISICO <> '0' THEN 'DEFICIENTE FISICO' WHEN PPESSOA.DEFICIENTEAUDITIVO <> '0' THEN 'DEFICIENTE AUDITIVO' WHEN PPESSOA.DEFICIENTEFALA <> '0' THEN 'DEFICIENTE FALA' WHEN PPESSOA.DEFICIENTEVISUAL <> '0' THEN 'DEFICIENTE VISUAL' WHEN PPESSOA.DEFICIENTEMENTAL <> '0' THEN 'DEFICIENTE MENTAL' ELSE 'SEM DEFICIENCIA' END DEFICIENTEFISICO from SHABILITACAOFILIAL inner join SCURSO on SHABILITACAOFILIAL.CODCURSO = SCURSO.CODCURSO inner join SMATRICPL on SMATRICPL.IDHABILITACAOFILIAL = SHABILITACAOFILIAL.IDHABILITACAOFILIAL inner join SALUNO on SALUNO.RA = SMATRICPL.RA inner join PPESSOA on PPESSOA.CODIGO = SALUNO.CODPESSOA inner join SPLETIVO on SPLETIVO.IDPERLET = SMATRICPL.IDPERLET INNER JOIN SPESSOA ON SPESSOA.CODIGO = PPESSOA.CODIGO FULL JOIN SINSTITUICAO ON SPESSOA.CODINST2GRAU = SINSTITUICAO.CODINST INNER JOIN SHABILITACAOALUNO ON SHABILITACAOALUNO.CODCOLIGADA = SHABILITACAOFILIAL.CODCOLIGADA AND SHABILITACAOALUNO.IDHABILITACAOFILIAL = SHABILITACAOFILIAL.IDHABILITACAOFILIAL AND SHABILITACAOALUNO.CODCOLIGADA = SMATRICPL.CODCOLIGADA AND SHABILITACAOALUNO.IDHABILITACAOFILIAL = SMATRICPL.IDHABILITACAOFILIAL AND SHABILITACAOALUNO.RA = SMATRICPL.RA WHERE SMATRICPL.CODSTATUS in (01, 02) and SMATRICPL.PERIODO = '1' and SPLETIVO.CODPERLET = '2013/1' and SCURSO.CODCURSO = '4' ORDER BY PPESSOA.NOME
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 Renata R Oliveira segunda-feira, 25 de março de 2013 21:57
segunda-feira, 25 de março de 2013 19:51Moderador
Todas as Respostas
-
Renata, boa tarde, se na condição voce colocar ao inves de 'branca' um numero funciona ?
Alexandre Matayosi Conde Mauricio.
segunda-feira, 25 de março de 2013 19:48 -
Renata, boa tarde!
Não é a coisa mais performatica do mundo mas a solução esta abaixo, fazendo a conversão para texto antes:
SELECT DISTINCT SMATRICPL.RA, PPESSOA.NOME ALUNO,PPESSOA.CPF CPF, PPESSOA.DTNASCIMENTO NASCIMENTO, SCURSO.NOME CURSO,SMATRICPL.PERIODO, SPLETIVO.CODPERLET,SHABILITACAOALUNO.DTINGRESSO,SINSTITUICAO.NOME ESCOLA, CASE WHEN SINSTITUICAO.TIPOINST = 1 THEN 'PUBLICA' WHEN SINSTITUICAO.TIPOINST = 2 THEN 'PRIVADA' ELSE '' END TIPO_INSTITUICAO, CASE WHEN CAST(PPESSOA.CORRACA AS VARCHAR(8000)) = 2 THEN 'branca' WHEN CAST(PPESSOA.CORRACA AS VARCHAR(8000)) = 6 THEN 'AMARELA' WHEN CAST(PPESSOA.CORRACA AS VARCHAR(8000)) = 0 THEN 'INDIGENA' WHEN CAST(PPESSOA.CORRACA AS VARCHAR(8000)) = 8 THEN 'PARDA' WHEN CAST(PPESSOA.CORRACA AS VARCHAR(8000)) = 4 THEN 'PPRETA' ELSE '100' END CORRACA, ( SELECT PPESSOA.NOME FROM PPESSOA WHERE PPESSOA.CODIGO = SPESSOA.CODPESSOAMAE) MAE, CASE WHEN PPESSOA.DEFICIENTEFISICO <> '0' THEN 'DEFICIENTE FISICO' WHEN PPESSOA.DEFICIENTEAUDITIVO <> '0' THEN 'DEFICIENTE AUDITIVO' WHEN PPESSOA.DEFICIENTEFALA <> '0' THEN 'DEFICIENTE FALA' WHEN PPESSOA.DEFICIENTEVISUAL <> '0' THEN 'DEFICIENTE VISUAL' WHEN PPESSOA.DEFICIENTEMENTAL <> '0' THEN 'DEFICIENTE MENTAL' ELSE 'SEM DEFICIENCIA' END DEFICIENTEFISICO from SHABILITACAOFILIAL inner join SCURSO on SHABILITACAOFILIAL.CODCURSO = SCURSO.CODCURSO inner join SMATRICPL on SMATRICPL.IDHABILITACAOFILIAL = SHABILITACAOFILIAL.IDHABILITACAOFILIAL inner join SALUNO on SALUNO.RA = SMATRICPL.RA inner join PPESSOA on PPESSOA.CODIGO = SALUNO.CODPESSOA inner join SPLETIVO on SPLETIVO.IDPERLET = SMATRICPL.IDPERLET INNER JOIN SPESSOA ON SPESSOA.CODIGO = PPESSOA.CODIGO FULL JOIN SINSTITUICAO ON SPESSOA.CODINST2GRAU = SINSTITUICAO.CODINST INNER JOIN SHABILITACAOALUNO ON SHABILITACAOALUNO.CODCOLIGADA = SHABILITACAOFILIAL.CODCOLIGADA AND SHABILITACAOALUNO.IDHABILITACAOFILIAL = SHABILITACAOFILIAL.IDHABILITACAOFILIAL AND SHABILITACAOALUNO.CODCOLIGADA = SMATRICPL.CODCOLIGADA AND SHABILITACAOALUNO.IDHABILITACAOFILIAL = SMATRICPL.IDHABILITACAOFILIAL AND SHABILITACAOALUNO.RA = SMATRICPL.RA WHERE SMATRICPL.CODSTATUS in (01, 02) and SMATRICPL.PERIODO = '1' and SPLETIVO.CODPERLET = '2013/1' and SCURSO.CODCURSO = '4' ORDER BY PPESSOA.NOME
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 Renata R Oliveira segunda-feira, 25 de março de 2013 21:57
segunda-feira, 25 de março de 2013 19:51Moderador -
Renata, já tentou assim?
CASE WHEN PPESSOA.CORRACA = 2 THEN 'branca' WHEN PPESSOA.CORRACA = 6 THEN '6' /* AMARELA */ WHEN PPESSOA.CORRACA = 0 THEN '0' /* INDIGENA */ WHEN PPESSOA.CORRACA = 8 THEN '8' /* PARDA */ WHEN PPESSOA.CORRACA = 4 THEN '4' /* PPRETA */ ELSE '100' END CORRACA,
O Retorno de um case, tem que ser do mesmo tipo de dados, você estava retornando integer com string.
- Editado Luis Olivetti segunda-feira, 25 de março de 2013 20:02
segunda-feira, 25 de março de 2013 19:53 -
Funciona Alexandre, porem preciso que apareça o texto
segunda-feira, 25 de março de 2013 21:50 -
Obrigada Fabrizzio funcionou perfeitamente.segunda-feira, 25 de março de 2013 22:28
-
Boa noite Luiz a sugestão do Fabrizzio funcionou, mais obrigadasegunda-feira, 25 de março de 2013 22:28