locked
Erro ao fazer um case RRS feed

  • 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.NOME

                
    segunda-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

    segunda-feira, 25 de março de 2013 19:51
    Moderador

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

    segunda-feira, 25 de março de 2013 19:51
    Moderador
  • 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 obrigada
    segunda-feira, 25 de março de 2013 22:28