Fórum SQL - Where e Having #575114
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))<2Chromusmaster
Responder
Gostei + 1
Clique aqui para fazer login e interagir na Comunidade :)