I am in need of help on how to improve my sql query. I am trying to select students who are not in a specific part of term of a semester. For example, student A is in part of term 3 or C03. I do not want them to pop up in my query. Student b is in part of terms 1,2,3,3,3 then I want them to show up in my query.
WITH POT AS
(SELECT PIDM, LISTAGG(PTRM, '; ') WITHIN GROUP(ORDER BY PTRM) PTRM_CODE
FROM (SELECT A.SFRSTCR_PIDM PIDM, A.SFRSTCR_PTRM_CODE PTRM
FROM SFRSTCR A
JOIN STVRSTS B
ON B.STVRSTS_CODE = A.SFRSTCR_RSTS_CODE
WHERE B.STVRSTS_INCL_SECT_ENRL = 'Y'
AND A.SFRSTCR_TERM_CODE = '&TERM'
AND A.SFRSTCR_PIDM NOT IN
(SELECT AA.SFRSTCR_PIDM
FROM SFRSTCR AA
WHERE AA.SFRSTCR_TERM_CODE = '&TERM'
AND AA.SFRSTCR_PTRM_CODE IN ('3', 'C03')))
GROUP BY PIDM
HAVING COUNT),
AID AS
(SELECT PIDM, LISTAGG(FUND, '; ') WITHIN GROUP(ORDER BY FUND) FUND_AW
FROM (SELECT C.RPRATRM_PIDM PIDM, C.RPRATRM_FUND_CODE FUND
FROM RPRATRM C
WHERE C.RPRATRM_PERIOD = '&TERM'
AND C.RPRATRM_ACCEPT_AMT > 0
AND C.RPRATRM_FUND_CODE IN ('DLS',
'DLS2',
'DLS3',
'DLU',
'DLU2',
'DLU3',
'PELLG',
'SEOGG',
'ZHAADG',
'ZMDG',
'DLPLS',
'DPLS2',
'DLPLS3',
'DLGU',
'DLGU2',
'DLGU3',
'DLGPL',
'DLGPL2'))
GROUP BY PIDM)
SELECT X.SPRIDEN_ID, POT.PTRM_CODE, AID.FUND_AW
FROM SPRIDEN X
JOIN POT
ON POT.PIDM = X.SPRIDEN_PIDM
JOIN AID
ON AID.PIDM = X.SPRIDEN_PIDM
WHERE X.SPRIDEN_CHANGE_IND IS NULL
tried this query and the not in clause but this is not working in my favor.