SQL - Where e Having

20/02/2017

0

Boa tarde estou fazendo uma consulta no banco de dados da TOTVS e preciso que a consulta não traga mais de uma vez a mesma atividade pois na hora do calculo do total de atividades deve ser apenas atividades que foram realizadas apenas uma vez. Por exemplo, o aluno fez um Simpósio no periodo de 2015 com tema X. Em 2016 ele voltou a fazer um Simpósio com o mesmo tema, logo o sistema vai considerar apenas como uma unica atividade feita, obrigand oele a fazer outra atividade diferente.

Como "filtrar" ?

SELECT DISTINCT CASE
         WHEN SATIVIDADEALUNO.IDOFERTA IS NULL THEN SATIVIDADEALUNO.DESCRICAO
         ELSE SATIVIDADE.DESCRICAO
       END AS ATIVIDADE,
	   CASE
         WHEN SATIVIDADEALUNO.IDOFERTA IS NULL THEN SATIVIDADEALUNO.IDOFERTA
         ELSE SATIVIDADE.IDOFERTA
       END AS IDOFERTA,
       SATIVIDADEALUNO.CARGAHORARIA,
       SATIVIDADEALUNO.CREDITOS,
       CONVERT(VARCHAR,SATIVIDADEALUNO.DATAINICIO,103)[DATAINICIO],
       CONVERT(VARCHAR,SATIVIDADEALUNO.DATAFIM,103)[DATAFIM],
       SATIVIDADEALUNO.RA,
       SPLETIVO.CODPERLET,
       SATIVIDADEALUNO.IDHABILITACAOFILIAL,
       SHABILITACAOALUNO.RA,
       PPESSOA.NOME
FROM   SATIVIDADEALUNO
       LEFT JOIN SATIVIDADE
         ON SATIVIDADE.CODCOLIGADA = SATIVIDADEALUNO.CODCOLIGADA
            AND SATIVIDADE.IDOFERTA = SATIVIDADEALUNO.IDOFERTA
       LEFT JOIN SMODALIDADE
         ON SMODALIDADE.CODCOLIGADA = SATIVIDADEALUNO.CODCOLIGADA
            AND SMODALIDADE.CODMODALIDADE = SATIVIDADEALUNO.CODMODALIDADE
            AND SMODALIDADE.CODCOMPONENTE = SATIVIDADEALUNO.CODCOMPONENTE
       LEFT JOIN SPLETIVO
         ON SPLETIVO.CODCOLIGADA = SATIVIDADEALUNO.CODCOLIGADA
            AND SPLETIVO.IDPERLET = SATIVIDADEALUNO.IDPERLET
       INNER JOIN SHABILITACAOALUNO
         ON SHABILITACAOALUNO.CODCOLIGADA = SATIVIDADEALUNO.CODCOLIGADA
            AND SHABILITACAOALUNO.IDHABILITACAOFILIAL = SATIVIDADEALUNO.IDHABILITACAOFILIAL
            AND SHABILITACAOALUNO.RA = SATIVIDADEALUNO.RA
       INNER JOIN SALUNO
         ON SALUNO.CODCOLIGADA = SHABILITACAOALUNO.CODCOLIGADA
            AND SALUNO.RA = SHABILITACAOALUNO.RA
       INNER JOIN PPESSOA
         ON PPESSOA.CODIGO = SALUNO.CODPESSOA
WHERE  SHABILITACAOALUNO.CODSTATUS NOT IN ( 36, 109, 24, 82,
                                            83, 31, 97, 34,
                                            92, 100, 17, 10,
                                            13, 90, 99, 38, 94 ) /* MATRICULAS QUE NÃO SERÃO CONSIDERADAS */
       AND SHABILITACAOALUNO.RA = '0007575'
       AND SATIVIDADEALUNO.CODCOLIGADA = 1
GROUP BY 
SATIVIDADEALUNO.IDOFERTA,
SATIVIDADE.IDOFERTA,
SATIVIDADEALUNO.DESCRICAO,
SATIVIDADE.DESCRICAO,
SATIVIDADEALUNO.CARGAHORARIA,
SATIVIDADEALUNO.CREDITOS,
SATIVIDADEALUNO.DATAINICIO,
SATIVIDADEALUNO.DATAFIM,
SATIVIDADEALUNO.RA,
SPLETIVO.CODPERLET,
SATIVIDADEALUNO.IDHABILITACAOFILIAL,
SHABILITACAOALUNO.RA,
PPESSOA.NOME


/*
AND SATIVIDADEALUNO.IDHABILITACAOFILIAL  =:IDHABILITACAOFILIAL1 */

HAVING count(CASE
         WHEN SATIVIDADEALUNO.IDOFERTA IS NULL THEN SATIVIDADEALUNO.IDOFERTA
         ELSE SATIVIDADE.IDOFERTA
       END)<2
Chromusmaster

Chromusmaster

Responder

Post mais votado

21/02/2017

Consegui resolver, bastei modificar o final
HAVING (SELECT COUNT(SATI.IDOFERTA) FROM SPLETIVO
 LEFT JOIN SATIVIDADEALUNO SATI
         ON SPLETIVO.CODCOLIGADA = SATI.CODCOLIGADA
            AND SPLETIVO.IDPERLET = SATI.IDPERLET
 LEFT JOIN SATIVIDADE SDD
         ON SDD.CODCOLIGADA = SATI.CODCOLIGADA
            AND SDD.IDOFERTA = SATI.IDOFERTA
			WHERE  SATI.RA=SHABILITACAOALUNO.RA
			AND (SATI.IDOFERTA=SATIVIDADEALUNO.IDOFERTA OR SDD.IDOFERTA=SATIVIDADE.IDOFERTA))<2

Chromusmaster

Chromusmaster
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar