2016-12-25 1 views
-2

Ich arbeite an PEOPLESOFT CMS. Studenten melden sich in Kursen an und erhalten Noten. Manchmal wiederholt ein Schüler einen Kurs und bekommt eine bessere Note. Ich muss die GPA berechnen, indem Sie nur die beste Klasse verwenden. Also für jeden Schüler, der Kurse wiederholt, muss ich ermitteln, was die höchste Note ist.E.g. im 2. Semester bekam er 3 grade_point , aber in 4 semester verbesserte er auf 4,5 grad_point. dann sollte 4,5 anstelle von 3 holen, wenn wir das Ergebnis für alle 4 semester melden, aber wenn wir bis zum 2ten Semester benachrichtigen, könnte 3 grad_point zurückgeben .hier konstruiere ich einen sql, der gut funktioniert in Auswahl bt wenn ich es sehe dann habe ich ein Problem für die Handhabung anders semester seine immer zurück max für 4. Semester Ergebnis bt in Sicht seine verpasste den Kurs bis 2 Semester gpa hier Abfrage istSo erhalten Sie die maximale Note für den gleichen Kurs in verschiedenen akademischen Sitzung

SELECT DISTINCT A.institution 
,A.acad_career 
,A.emplid 
,a.crse_id 
,A.UNT_TAKEN 
, a.acad_prog 
,first_value(a.grade_points) OVER (PARTITION BY A.emplid 
,a.crse_id 
    ORDER BY a.grade_points DESC) AS GPA 
    ,first_value(a.strm) OVER (PARTITION BY A.emplid 
    ,a.crse_id 
    ORDER BY a.grade_points DESC) AS strm 
    FROM ps_qau_maxgp_ugrd a 
WHERE acad_career='UGRD' 
AND Emplid LIKE '04091313014%' 
AND Strm='1313' 
    ORDER BY A.institution ,A.acad_career ,A.emplid ,A.UNT_TAKEN , a.acad_prog 

enter image description here
enter image description here enter image description here

+0

Bitte einige Beispieldaten, tatsächliche Ausgabe und erwartete Ausgabe posten – GurV

+0

Ich verstehe nicht. Sie wählen die höchste Note aus, die ein Mitarbeiter in einem Kurs über verschiedene Sitzungen erhalten hat, und nennen das "GPA"? Warum? GPA hat eine sehr gut definierte Bedeutung, die sich von Ihrer Wahl unterscheidet. Ich sehe nirgendwo in Ihrem Code, wo der tatsächliche GPA berechnet wird. Zusätzlich zum Code sollten Sie die Tabellenstruktur (Tabellennamen, Spaltennamen und Datentypen und ihre Beziehung) anzeigen. Sie haben eine anständige Aufgabe gemacht, die Anforderung zu erklären, also ist es nicht notwendig, sie zu wiederholen. Dann zeigen Sie bitte eine kleine Probe der Ausgabe, damit wir wissen, was Sie brauchen. – mathguy

+0

Außerdem scheint es, was Sie hier zeigen, ein Zwischenergebnis. Wenn ja, ist das in Ordnung, aber zeigen Sie uns das gewünschte ENDGÜLTIGE Ergebnis. Es ist durchaus möglich, dass dieser Zwischenschritt nicht benötigt wird und Sie eine einfachere, schnellere Lösung erhalten, die einfacher zu schreiben, zu lesen und zu warten ist. – mathguy

Antwort

0

Gerade MAX und GROUP BY verwenden.

SELECT A.institution, 
     A.acad_career, 
     A.emplid, 
     a.crse_id, 
     A.unt_taken, 
     a.acad_prog, 
     Max(a.grade_points) GPA, 
     Max(a.strm)   AS strm 
FROM ps_qau_maxgp_ugrd a 
WHERE acad_career = 'UGRD' 
     AND emplid LIKE '04091313014%' 
     AND strm = '1313' 
GROUP BY A.institution, 
      A.acad_career, 
      A.emplid, 
      a.crse_id, 
      A.unt_taken, 
      a.acad_prog; 
+0

tut mir leid es tut nicht im umgekehrten Fall arbeiten, wenn die Studenten in 4 Semestern weniger Noten erhalten haben als am besten 2. Sem. Noten. – saqib

+0

@saqib deshalb habe ich nach Beispieldaten gefragt. – GurV

+0

sing ich ein paar Bilder von Beispieldaten bitte schauen Sie sich jeweils ... ich brauche alles aus in einer Ansicht bt meine Skripte funktioniert gut als einzelne bt nach der Ansicht eine verpasste wiederholen Kurs für das 2. Semester – saqib

0

Ich glaube, Sie müssen das Datum betrachten, an dem die Note eingegeben wurde. Für einen bestimmten Begriff und klassen nbr, sollten Sie die größte Klasse ziehen: Pseudocode:

select 
    max(date_entered) 
group by 
    institution, 
    acad_career, 
    crse_id, 
    term, 
    class_nbr(if you have it) 

Das Problem ist, dass mit der Tabelle, die Sie verwenden, i glaube nicht, ist die eigentliche Einschreibung Tabelle. Ich bin nur mit CS vertraut, also würde ich die Tabelle ps_stdnt_enrl oder ps_stdnt_car_term betrachten, um die gesammelten Daten für einen Begriff zu erhalten.

Verwandte Themen