I have a query which should return one row if the conditions are met. This query compares columns from 3 tables and should use the max value of DEGREE_HIERARCHY since there can be more than one value. It then should use the max(DEGREE_HIERARCHY) in the where clause to satisfy the conditions.
The code I have so far has the error:
x
[Error] Execution (1: 8): ORA-00937: not a single-group group function
Any help is appreciated thanks!
SELECT V.FACULTY_DEGREE_CODE,
V.FACULTY_SUBJECT_CODE,
I.EMPLOYEE_DEPARTMENT_HOME_ORG,
MAX(D.DEGREE_HIERARCHY)
FROM V_degrees V
JOIN DEGREE_CROSSWALK D
ON V.FACULTY_DEGREE_CODE =
D.DEGREE_CODE
JOIN I_DETAILS I
ON V.ID = I.HR_ID
INNER JOIN SUBJ_CROSSWALK S
ON V.FACULTY_DEGREE_CODE =
S.FACULTY_DEGREE_CODE
INNER JOIN SUBJ_CROSSWALK S
ON S.FACULTY_SUBJECT_CODE =
V.FACULTY_SUBJECT_CODE
WHERE V.PERSON_id = 12345
AND
(
(I.EMPLOYEE_DEPARTMENT_HOME_ORG != '396000'
OR I.EMPLOYEE_DEPARTMENT_HOME_ORG != '396010'
) and
(DEGREE_HIERARCHY > 30)
)
AND
(
(DEGREE_HIERARCHY > 30) AND
(NOT EXISTS (SELECT FACULTY_SUBJECT_CODE, FACULTY_DEGREE_CODE
FROM SUBJ_CROSSWALK S
WHERE S.FACULTY_SUBJECT_CODE = V.FACULTY_SUBJECT_CODE
AND
V.FACULTY_DEGREE_CODE = S.FACULTY_DEGREE_CODE)
)
)
Advertisement
Answer
Unaggregated columns in the SELECT
list must be present in the GROUP BY
clause… that you forgot to add. Just add at the end:
GROUP BY V.FACULTY_DEGREE_CODE,
V.FACULTY_SUBJECT_CODE,
I.EMPLOYEE_DEPARTMENT_HOME_ORG