2016-05-09 2 views
-2
SELECT A.institution, 
     A.acad_career, 
     A.emplid, 
     a.strm, 
     NVL(
      SUM(
       CASE 
        WHEN  A.repeat_candidate IN ('N', 'Y') 
          AND A.CRSE_GRADE_OFF != 'F' THEN 
         MAX(grade_points) 
        ELSE 
         (grade_points) 
       END 
       ), 
      0 
      ) 
      AS GPA, 
     NVL(SUM(CASE WHEN a.repeat_candidate = 'N' THEN A.UNT_TAKEN END), 0) AS TAKEN, 
     a.acad_prog 
    FROM ps_stdnt_enrl A, ps_STDNT_CLAS_D_VW B 
    WHERE  A.emplid = B.emplid 
     AND A.class_nbr = B.class_nbr 
     AND A.strm = B.strm 
     AND A.acad_career = B.acad_career 
     AND a.STDNT_ENRL_STATUS = 'E' 
     AND a.emplid LIKE '06381313011%' 
GROUP BY a.emplid, 
     a.acad_career, 
     a.institution, 
     a.acad_prog, 
     A.strm 

Этот запрос работает нормально без функции max bt здесь проблемы заключаются в том, что учащийся может повторить пройденный курс, поэтому при этом условии требуется максимальное значение, но его ошибка возврата не является одной групповой функцией.Как использовать функцию MAX в выражении case в выражении суммы в oracle sql?

+2

В чем проблема? Это ошибка? Если да, то какая ошибка? – Aleksej

ответ

1

Вы не можете встраивать функции агрегации. Код:

select 
data.institution 
,data.acad_career 
,data.emplid 
,data.strm 
,NVL(SUM(data.GPA), 0) as GPA 
,data.TAKEN 
,data.acad_prog 
from 
(SELECT A.institution, 
     A.acad_career, 
     A.emplid, 
     a.strm, 
     MAX(grade_points) AS GPA, 
     NVL(SUM(CASE WHEN a.repeat_candidate = 'N' THEN A.UNT_TAKEN END), 0) AS TAKEN, 
     a.acad_prog 
    FROM ps_stdnt_enrl A, ps_STDNT_CLAS_D_VW B 
    WHERE  A.emplid = B.emplid 
     AND A.class_nbr = B.class_nbr 
     AND A.strm = B.strm 
     AND A.acad_career = B.acad_career 
     AND a.STDNT_ENRL_STATUS = 'E' 
     AND a.emplid LIKE '06381313011%' 
GROUP BY a.emplid, 
     a.acad_career, 
     a.institution, 
     a.acad_prog, 
     A.strm 
) data 
group by 
data.institution 
,data.acad_career 
,data.emplid 
,data.strm 
,data.TAKEN 
,data.acad_prog 
+0

спасибо miyazawa ... его не работает в соответствии с моим требованием, я потребовал максимальный класс тех студентов, которые повторяют пройденный курс .eg. Студент по курсу 1 и 2 семестра и получил оценку c +, и повторите этот курс в третьем семестре и возьмите класс B +, тогда запрос должен выглядеть лучше всего, когда мы открываем отчет за 3-й семестр, но когда мы открываем отчет за 2-й семестр, он должен вернуть c + grade. – saqib