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" ?
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
Curtir tópico
+ 0
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
Responder
Clique aqui para fazer login e interagir na Comunidade :)