--freemarker template --Leistungen mit Veranstaltung -> Semester: SELECT L.st_studium_nr, S.st_studstamm_nr, val(L.matrikelnummer) as matrikelnummer, null::integer as st_studiengang_nr, null::integer as studiengang_nr, null::integer as fach_nr, null::integer as st_studienstatus_nr, null::integer as semester, E.semester_tid as semester_veranst, null::integer as fachsemester, null::varchar(255) as unikey, L.leistung_nr, L.leistungstyp_nr, L.leistungsdetailtyp_kb, L.studienidentifikator, L.spov_abschluss, L.stp_sp_nr, L.veranstaltung_nummer, L.veranstaltung_semester, L.veranstaltung_titel, L.veranstaltung_art, L.semesterstunden, L.unterrichtseinheiten, L.thema_individuell, L.pv_notenskala_nr, L.note, L.note_name, L.note_zahl, L.pv_pruef_zusatz_typen_nr, L.note_zusatz, L.note_zusatz_name, L.note_positiv_flag, L.note_negativ_flag, L.pv_notenskala_typ_nr, L.pv_notenskala_typ_kb, L.pv_notenskala_typ_name, L.credits, date(L.leistungsdatum) as leistungsdatum, L.anerkannt_flag, L.zusatzleistung_flag, L.leistungsstatus_nr, L.leistungsstatus_map_kb, 2::integer as abschnitt, --provisorisch erstmal nur Hauptprüfungen null::integer as pnr, null::integer as leistung_nr_msg, null::integer as st_studiengang_nr_msg, null::date as leistungsdatum_msg, null::integer as semester_msg, null::char(10) as po_stp_stp_version_kb into temp tmp_pruef FROM costage_st_semester E, costage_leistungen_typen T, costage_leistungen L, costage_st_studierendenstammdaten S where E.semester_id=L.veranstaltung_semester and T.leistungstyp_nr=L.leistungstyp_nr and S.matrikelnummer::varchar(255)=L.matrikelnummer -- TSAB/AB: and T.kurzbezeichnung in ('AP','AAP') --Abschlussprüfung/Anerkannte Abschlussprüfung and L.leistungsstatus_nr in (4,2) --Letztgültig/Final/gültige Leistung --px_leistungen_status_typen_v: --4^F^Letztgültig^Final^ --1^P^in Bearbeitung^in process^ --2^V^gültige Leistung^valid^ --3^I^ungültige Leistung^invalid^ --5^D^gelöscht^deleted^ and E.semester_tid >= ${beginn_semester} ; --Leistungen ohne Veranstaltungssemester gehen über Prüfungsdatum: insert into tmp_pruef SELECT L.st_studium_nr, S.st_studstamm_nr, val(L.matrikelnummer) as matrikelnummer, null::integer as st_studiengang_nr, null::integer as studiengang_nr, null::integer as fach_nr, null::integer as st_studienstatus_nr, E.semester_tid as semester, null::integer as semester_veranst, null::integer as fachsemester, null::varchar(255) as unikey, L.leistung_nr, L.leistungstyp_nr, L.leistungsdetailtyp_kb, L.studienidentifikator, L.spov_abschluss, L.stp_sp_nr, L.veranstaltung_nummer, L.veranstaltung_semester, L.veranstaltung_titel, L.veranstaltung_art, L.semesterstunden, L.unterrichtseinheiten, L.thema_individuell, L.pv_notenskala_nr, L.note, L.note_name, L.note_zahl, L.pv_pruef_zusatz_typen_nr, L.note_zusatz, L.note_zusatz_name, L.note_positiv_flag, L.note_negativ_flag, L.pv_notenskala_typ_nr, L.pv_notenskala_typ_kb, L.pv_notenskala_typ_name, L.credits, date(L.leistungsdatum) as leistungsdatum, L.anerkannt_flag, L.zusatzleistung_flag, L.leistungsstatus_nr, L.leistungsstatus_map_kb, 2::integer as abschnitt, --provisorisch erstmal nur Hauptprüfungen null::integer as pnr, null::integer as leistung_nr_msg, null::integer as st_studiengang_nr_msg, null::date as leistungsdatum_msg, null::integer as semester_msg FROM costage_st_semester E, costage_leistungen_typen T, costage_leistungen L, costage_st_studierendenstammdaten S where L.leistungsdatum between E.semester_anfang and E.semester_ende and L.veranstaltung_semester is null and T.leistungstyp_nr=L.leistungstyp_nr and S.matrikelnummer::varchar(255)=L.matrikelnummer -- TSAB/AB: and T.kurzbezeichnung in ('AP','AAP') --Abschlussprüfung/Anerkannte Abschlussprüfung and L.leistungsstatus_nr in (4,2) --Letztgültig/Final/gültige Leistung and E.semester_tid >= ${beginn_semester} ; update tmp_pruef set semester=E.semester_tid FROM costage_st_semester E where tmp_pruef.leistungsdatum between E.semester_anfang and E.semester_ende and tmp_pruef.semester is null; update tmp_pruef set semester_veranst=semester where semester_veranst is null; update tmp_pruef set st_studiengang_nr=S.st_studiengang_nr from costage_st_studien S where S.st_studium_nr=tmp_pruef.st_studium_nr and S.st_studstamm_nr=tmp_pruef.st_studstamm_nr ; --Fachsemester bei TSAB aus Sem. des Prüfungsdatums holen: update tmp_pruef set fachsemester = S.fachsemester from costage_st_studien_aggr S where S.semester=tmp_pruef.semester and S.st_studium_nr=tmp_pruef.st_studium_nr and S.matrikelnummer=tmp_pruef.matrikelnummer and tmp_pruef.leistungsdetailtyp_kb='TSAB' ; --Prüfung kann nach letztem eingeschr. Semester sein, daher zuerst letztes Sem. ermitteln: select S.st_studium_nr, S.matrikelnummer, null::integer as st_studienstatus_nr, null::integer as studiengang_nr, null::integer as fach_nr, null::char(10) as unikey, null::integer as st_studiengang_nr_msg, max(S.semester) as semester into temp tmp_max_sem from costage_st_studien_aggr S, tmp_pruef P where S.st_studium_nr=P.st_studium_nr and S.matrikelnummer=P.matrikelnummer group by 1,2 ; --Dann Studium vom letzten Semester in den Prüfungs-Datensatz schreiben: update tmp_pruef set st_studienstatus_nr=S.st_studienstatus_nr, --fachsemester = S.fachsemester, --wird oben ermittelt, ab 0.6 nicht mehr aus letztem Studiums-Semester studiengang_nr=S.studiengang_nr, fach_nr=S.fach_nr, unikey=S.unikey, st_studiengang_nr_msg=S.st_studiengang_nr_msg, po_stp_stp_version_kb=S.po_stp_stp_version_kb from tmp_max_sem M, costage_st_studien_aggr S where S.matrikelnummer=M.matrikelnummer and S.st_studium_nr=M.st_studium_nr and S.semester=M.semester and S.st_studium_nr=tmp_pruef.st_studium_nr and S.matrikelnummer=tmp_pruef.matrikelnummer ; drop table tmp_max_sem; --MSG-Daten nachladen: --zuerst Kopie nur mit MSG: select * into temp tmp_pruef2 from tmp_pruef where leistungsdetailtyp_kb !='TSAB' ; --Dann Nr., Datum und Semster des MSG nachladen (TODO: ggf. noch Fachsemester?) update tmp_pruef set leistung_nr_msg=T.leistung_nr, leistungsdatum_msg=T.leistungsdatum, semester_msg=T.semester from tmp_pruef2 T where tmp_pruef.st_studiengang_nr_msg=T.st_studiengang_nr and tmp_pruef.leistungsdetailtyp_kb ='TSAB' and T.matrikelnummer=tmp_pruef.matrikelnummer ; --Leistungsdatum determiniert Semester auch bei MSG: -- update tmp_pruef set semester=E.semester_tid -- FROM costage_st_semester E -- where tmp_pruef.leistungsdatum_msg between E.semester_anfang and E.semester_ende -- and tmp_pruef.leistungsdetailtyp_kb !='TSAB' -- and tmp_pruef.leistungsdatum_msg is not null; update tmp_pruef set leistung_nr_msg=leistung_nr, leistungsdatum_msg=leistungsdatum, semester_msg=semester where tmp_pruef.leistungsdetailtyp_kb !='TSAB' ; --Fachsemester bei MSG gibt es in CO nicht. Daher die Regel: --die Fachsemesterzahl sollte die höchste FS-Zahl aus allen TSG enthalten: select matrikelnummer,st_studiengang_nr_msg,max(semester) as semester_max,max(fachsemester) as fachsem_max into temp tmp_fachsem_msg from tmp_pruef where leistungsdetailtyp_kb='TSAB' and st_studiengang_nr_msg is not null group by 1,2; update tmp_pruef set fachsemester=T.fachsem_max from tmp_fachsem_msg T where T.matrikelnummer=tmp_pruef.matrikelnummer and T.st_studiengang_nr_msg=tmp_pruef.st_studiengang_nr and T.semester_max <=tmp_pruef.semester and tmp_pruef.leistungsdetailtyp_kb='BAKN' ; drop table tmp_fachsem_msg; --unikey setzen, wenn noch nicht vorhanden (z.B. bei MSG): update tmp_pruef set unikey=K.unikey from costage_st_studiengaenge G, costage_st_studienkennzahlen K where G.st_studiengang_nr=tmp_pruef.st_studiengang_nr and K.st_skz_nr=G.st_skz_nr and tmp_pruef.unikey is null ; delete from costage_st_pruef_aggr where semester >= ${beginn_semester}; insert into costage_st_pruef_aggr(st_studium_nr, st_studstamm_nr, matrikelnummer, semester, semester_veranst, st_studiengang_nr, st_studiengang_nr_msg, studiengang_nr, fach_nr, unikey, studienidentifikator, fachsemester, leistung_nr, leistungstyp_nr, leistungsdetailtyp_kb, pnr, abschnitt, stp_sp_nr, po_stp_stp_version_kb, note, credits, leistungsdatum, anerkannt_flag, leistungsstatus_nr, leistungsstatus_map_kb, leistung_nr_msg, leistungsdatum_msg, semester_msg, summe) select st_studium_nr, st_studstamm_nr, matrikelnummer, semester, semester_veranst, st_studiengang_nr, st_studiengang_nr_msg, studiengang_nr, fach_nr, unikey, substring(studienidentifikator from 1 for 255), fachsemester, leistung_nr, leistungstyp_nr, leistungsdetailtyp_kb, pnr, abschnitt, stp_sp_nr, po_stp_stp_version_kb, case when pv_notenskala_typ_kb in ('DE1','DE2','DE3','DE4','DE5','DE6','DE7') or pv_notenskala_typ_kb is null then note_zahl else null::float end as note, credits, leistungsdatum, anerkannt_flag, leistungsstatus_nr, leistungsstatus_map_kb, leistung_nr_msg, leistungsdatum_msg, semester_msg, count(*) from tmp_pruef group by 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28; drop table tmp_pruef; drop table tmp_pruef2;