SQL - UNION

13/03/2019

0

Tenho a seguinte consulta
SELECT SATIVIDADEALUNO.CODCOLIGADA,
       SATIVIDADEALUNO.IDATIVIDADE,
       SATIVIDADEALUNO.IDOFERTA,
       SATIVIDADE.DESCRICAO,
       CONVERT(VARCHAR(MAX), SATIVIDADEALUNO.RA) CODPARTICIPANTE,
       PPESSOA.NOME                              NOMEPARTICIPANTE,
       'A'                                       TIPOPARTICIPANTE,
       'Aluno'                                   TIPOPARTICIPANTEDESCRICAO,
       SALUNO.CODPESSOA
FROM   SALUNO (NOLOCK)
       INNER JOIN SHABILITACAOALUNO (NOLOCK)
         ON SHABILITACAOALUNO.RA = SALUNO.RA
            AND SHABILITACAOALUNO.CODCOLIGADA = SALUNO.CODCOLIGADA
       INNER JOIN SATIVIDADEALUNO (NOLOCK)
         ON SATIVIDADEALUNO.IDHABILITACAOFILIAL = SHABILITACAOALUNO.IDHABILITACAOFILIAL
            AND SATIVIDADEALUNO.RA = SHABILITACAOALUNO.RA
            AND SATIVIDADEALUNO.CODCOLIGADA = SHABILITACAOALUNO.CODCOLIGADA
       INNER JOIN PPESSOA (NOLOCK)
         ON PPESSOA.CODIGO = SALUNO.CODPESSOA
       INNER JOIN SATIVIDADE (NOLOCK)
         ON SATIVIDADE.CODCOLIGADA = SATIVIDADEALUNO.CODCOLIGADA
            AND SATIVIDADE.IDOFERTA = SATIVIDADEALUNO.IDOFERTA
WHERE  CUMPRIUATIVIDADE = 'N'
       AND SATIVIDADEALUNO.IDPERLET = @P
       AND SATIVIDADEALUNO.IDOFERTA = :IDOFERTA
UNION
SELECT SATIVIDADEPROFESSOR.CODCOLIGADA,
       SATIVIDADEPROFESSOR.IDATIVIDADEPROF,
       SATIVIDADEPROFESSOR.IDOFERTA,
       SATIVIDADE.DESCRICAO,
       CONVERT(VARCHAR(MAX), SATIVIDADEPROFESSOR.CODPROF) CODPARTICIPANTE,
       PPESSOA.NOME                                       NOMEPARTICIPANTE,
       'P'                                                TIPOPARTICIPANTE,
       'Professor'                                        TIPOPARTICIPANTEDESCRICAO,
       SPROFESSOR.CODPESSOA
FROM   SATIVIDADEPROFESSOR
       INNER JOIN SATIVIDADE (NOLOCK)
         ON SATIVIDADE.CODCOLIGADA = SATIVIDADEPROFESSOR.CODCOLIGADA
            AND SATIVIDADE.IDOFERTA = SATIVIDADEPROFESSOR.IDOFERTA
       INNER JOIN SPROFESSOR (NOLOCK)
         ON SPROFESSOR.CODPROF = SATIVIDADEPROFESSOR.CODPROF
            AND SPROFESSOR.CODCOLIGADA = SATIVIDADEPROFESSOR.CODCOLIGADA
       INNER JOIN PPESSOA (NOLOCK)
         ON PPESSOA.CODIGO = SPROFESSOR.CODPESSOA
WHERE  CUMPRIUATIVIDADE = 'N'
       AND DTINICIO >= @DTI
       AND DTTERMINO <= @DTF
       AND SATIVIDADEPROFESSOR.IDOFERTA = :IDOFERTA

Antes de colocar o campo como varchar o retorno do union colocava o Código do participante como inteiro, isto sem ter sido definido. Nas tabelas onde o campo é buscado apenas o código da pessoa é inteiro todo o restante é Varchar (vide função SP_HELP).
Gostaria de entender o por que disto. Alguém sabe dizer?
Chromusmaster

Chromusmaster

Responder

Post mais votado

14/03/2019

talvez ele se baseie no tipo de campo da última tabela utilizada.

Emerson Nascimento

Emerson Nascimento
Responder

Mais Posts

13/03/2019

Emerson Nascimento

Você obtém o resultado de CODPARTICIPANTE de campos de duas tabelas distintas: SATIVIDADEALUNO.RA e SATIVIDADEPROFESSOR.CODPROF.

Acredito que um desses campos deve estar definido como inteiro.

Responder

13/03/2019

Chromusmaster

Você obtém o resultado de CODPARTICIPANTE de campos de duas tabelas distintas: SATIVIDADEALUNO.RA e SATIVIDADEPROFESSOR.CODPROF.

Acredito que um desses campos deve estar definido como inteiro.

Na verdade são de três tabela, a consulta anterior é apenas um trecho dela. Na terceira tabela o codigo do participante é definido como inteiro. Nestes casos, o Union vai se basear na diferença entre os campos? Deveria ter pedo varchar, já que dois campo são varchar, não?
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar