diff --git a/src-modules/module/costage/hilfstabellen/costage_st_studien_aggr_fuellen.sql b/src-modules/module/costage/hilfstabellen/costage_st_studien_aggr_fuellen.sql index a0d0b3a..5b6f21b 100644 --- a/src-modules/module/costage/hilfstabellen/costage_st_studien_aggr_fuellen.sql +++ b/src-modules/module/costage/hilfstabellen/costage_st_studien_aggr_fuellen.sql @@ -34,11 +34,11 @@ S.ca12_staat, S.second_nationality, SG.fachkennzeichen, ST.studienform_statistik_code, -(case when SG.studiengangs_typ_kb in ('MSG') then SG.st_studiengang_nr else null::integer end) as st_studiengang_nr_msg, +--(case when SG.studiengangs_typ_kb in ('MSG') then SG.st_studiengang_nr else null::integer end) as st_studiengang_nr_msg, null::varchar(255) as studiengangs_identifikator_msg, null::integer as st_studiengang_nr_msg_primaerflag, -(case when SG.studiengangs_typ_kb in ('TSG') then SG.st_studiengang_nr else null::integer end) as st_studiengang_nr_tsg, -null::integer as studienfach_sortierung, +--(case when SG.studiengangs_typ_kb in ('TSG') then SG.st_studiengang_nr else null::integer end) as st_studiengang_nr_tsg, +--null::integer as studienfach_sortierung, null::char(10) as hrst, null::integer as fachsemester, null::integer as hssem, @@ -87,9 +87,9 @@ and (SA.studienstatustyp not in ('Z','X') or ( and date(SA.gueltig_ab) < date(SM.semester_ende) )) --Studis außer erst/neueinschr/rückmeld/beurlaubt werden in der Semestermitte exmatr. zum Endedatum Semesterende, wenn dieses Datum in der Zukunft liegt soll der Studi mit dem vorherigen Status erscheinen --and SA.studienstatustyp not in ('a','o') +--group by 1,2,3,4,5,6,7,8,9,10,11,12,13 and ${COSTAGE_STUDENT_FILTER} and SM.semester_tid >= ${beginn_semester} ---group by 1,2,3,4,5,6,7,8,9,10,11,12,13 ; select 1,timestamp_str(now()) from xdummy; @@ -102,17 +102,46 @@ and tmp_studien.st_sem_nr = H.st_sem_nr and hoererstatus_kb != 'E' --der Hörerstatus "E - Exmatrikuliert" gilt eigentlich erst zum Studienende, hat aber kein "gültig ab" Datum. Der Hörerstatus "E" kann ignoriert werden. ; +--tmp_studien enthält TSG, ESG und MSG +--wir machen den MSG von einer Zeile zu einer Spalte -update tmp_studien +drop table if exists tmp_studien_esg_tsg; +select *, +1::integer as primaerflag, +null::integer as letztes_tsg_semester + into temp tmp_studien_esg_tsg from tmp_studien T +where T.studiengangs_typ_kb in ('ESG','TSG') +and T.status_historie=1 + and T.primaerflag_studien=1 + ; + +--2. Prio: aus costage_st_hauptstudien: +insert into tmp_studien_esg_tsg +select T.*, +(case when H.st_studstamm_nr > 0 then 1::integer else 0::integer end) as primaerflag, +null::integer as letztes_tsg_semester +from tmp_studien T left outer join costage_st_hauptstudien H + on ( H.st_studstamm_nr=T.st_studstamm_nr + and H.st_studium_nr=T.st_studium_nr + and H.st_sem_nr=T.st_sem_nr) + where T.status_historie=1 + and T.studiengangs_typ_kb in ('ESG','TSG') + and T.primaerflag_studien=0 + ; + + + + +update tmp_studien_esg_tsg set fachsemester=F.fachsemester from costage_st_fachsemester F -where F.st_studium_nr=tmp_studien.st_studium_nr -and F.st_sem_nr=tmp_studien.st_sem_nr +where F.st_studium_nr=tmp_studien_esg_tsg.st_studium_nr +and F.st_sem_nr=tmp_studien_esg_tsg.st_sem_nr and F.fachsemestertyp='FS' ; -update tmp_studien +update tmp_studien_esg_tsg set hzb_art_nr=H.hzb_art_nr, hzb_datum=H.hzb_datum, hzb_note=(case when substring(H.hzb_note from 1 for 1) ~ '[0-9]' @@ -120,23 +149,23 @@ and substring(H.hzb_note from 2 for 1) in (',','.') and substring(H.hzb_note from 3 for 1) ~ '[0-9]' and (substring(H.hzb_note from 4 for 1) ~ '[0-9]' or substring(H.hzb_note from 4 for 1)='') and length(H.hzb_note)<=4 then to_number(replace(H.hzb_note,',','.'),'9.99') -when H.hzb_note ~ '[0-9]' then decval(H.hzb_note) +when H.hzb_note ~ '[0-9]' and length(H.hzb_note) <=4 then decval(H.hzb_note) else null::decimal(8,4) end ), hzb_land_sub_r_nr=H.hzb_land_sub_r_nr, hzb_land_nr=H.hzb_land_nr, hzb_jahr=H.hzb_jahr from costage_st_hzb H -where tmp_studien.st_studstamm_nr = H.st_person_nr +where tmp_studien_esg_tsg.st_studstamm_nr = H.st_person_nr ; select 10,timestamp_str(now()) from xdummy; --Abmeldungsart studienbezogen: -update tmp_studien set abm_art_s=P.st_abm_art_kurzbezeichnung +update tmp_studien_esg_tsg set abm_art_s=P.st_abm_art_kurzbezeichnung from costage_st_personen_abmeldungen P, costage_st_semester S, costage_st_abmeldungsarten A where S.st_sem_nr=P.st_sem_nr -and S.semester_tid=tmp_studien.semester -and P.st_studium_nr=tmp_studien.st_studium_nr +and S.semester_tid=tmp_studien_esg_tsg.semester +and P.st_studium_nr=tmp_studien_esg_tsg.st_studium_nr and A.st_abm_art_kurzbezeichnung=P.st_abm_art_kurzbezeichnung and A.bezug='S' ; @@ -149,31 +178,31 @@ create index tmp_ix3 on tmp_studien(studiengangs_typ_kb); create index tmp_ix5 on tmp_studien(status_historie); create index tmp_ix6 on tmp_studien(primaerflag_studien); ---Primärflag ermitteln: ---1. Prio: aus px_st_studien_v: -select T.*, -1::integer as primaerflag, -null::integer as letztes_tsg_semester -into temp tmp_studien2 -from tmp_studien T - where T.status_historie=1 - and T.studiengangs_typ_kb in ('ESG','TSG') - and T.primaerflag_studien=1 - ; - ---2. Prio: aus costage_st_hauptstudien: -insert into tmp_studien2 -select T.*, -(case when H.st_studstamm_nr > 0 then 1::integer else 0::integer end) as primaerflag, -null::integer as letztes_tsg_semester -from tmp_studien T left outer join costage_st_hauptstudien H - on ( H.st_studstamm_nr=T.st_studstamm_nr - and H.st_studium_nr=T.st_studium_nr - and H.st_sem_nr=T.st_sem_nr) - where T.status_historie=1 - and T.studiengangs_typ_kb in ('ESG','TSG') - and T.primaerflag_studien=0 - ; +-- --Primärflag ermitteln: +-- --1. Prio: aus px_st_studien_v: +-- select T.*, +-- 1::integer as primaerflag, +-- null::integer as letztes_tsg_semester +-- into temp tmp_studien2 +-- from tmp_studien T +-- where T.status_historie=1 +-- and T.studiengangs_typ_kb in ('ESG','TSG') +-- and T.primaerflag_studien=1 +-- ; +-- +-- --2. Prio: aus costage_st_hauptstudien: +-- insert into tmp_studien2 +-- select T.*, +-- (case when H.st_studstamm_nr > 0 then 1::integer else 0::integer end) as primaerflag, +-- null::integer as letztes_tsg_semester +-- from tmp_studien T left outer join costage_st_hauptstudien H +-- on ( H.st_studstamm_nr=T.st_studstamm_nr +-- and H.st_studium_nr=T.st_studium_nr +-- and H.st_sem_nr=T.st_sem_nr) +-- where T.status_historie=1 +-- and T.studiengangs_typ_kb in ('ESG','TSG') +-- and T.primaerflag_studien=0 +-- ; select 30,timestamp_str(now()) from xdummy; @@ -193,236 +222,333 @@ select 30,timestamp_str(now()) from xdummy; -- and H.st_studstamm_nr is null -- ; -create index tmp_ix2_1 on tmp_studien2(st_studiengang_nr); -create index tmp_ix2_2 on tmp_studien2(st_studstamm_nr); -create index tmp_ix2_3 on tmp_studien2(studiengangs_typ_kb); -create index tmp_ix2_4 on tmp_studien2(st_sem_nr); -create index tmp_ix2_7 on tmp_studien2(st_absz_nr); +-- create index tmp_ix2_1 on tmp_studien2(st_studiengang_nr); +-- create index tmp_ix2_2 on tmp_studien2(st_studstamm_nr); +-- create index tmp_ix2_3 on tmp_studien2(studiengangs_typ_kb); +-- create index tmp_ix2_4 on tmp_studien2(st_sem_nr); +-- create index tmp_ix2_7 on tmp_studien2(st_absz_nr); select 40,timestamp_str(now()) from xdummy; --Ermittlung msg bei TSG: + + +drop table if exists tmp_studien_msg; + +select +st_absz_nr, +st_skz_nr, +studiengangs_identifikator, +studiengangs_bezeichnung, +st_studium_nr, +st_studstamm_nr, +st_studiengang_nr, +studienstatustyp, +st_studienstatus_nr, +beginn_datum, +gueltig_ab, +semester, +primaerflag_studien, +hrst + into temp tmp_studien_msg +from tmp_studien T where T.studiengangs_typ_kb in ('MSG') +and T.status_historie=1 +; + --es kann pro Studi und Semester und Abschlussziel mehrere MSG geben, --daqher zuerst den jeweils letzten ermitteln. Dieser ist dann der Default-MSG: -select S.st_sem_nr, -S.st_studstamm_nr, -S2.st_studium_nr as st_studium_nr_tsg , -S.primaerflag_studien, -S.beginn_datum,min(S.st_studium_nr) as st_studium_nr_msg + +drop table if exists tmp_tsg2msg; +--wie viele gleichzeitige MSG pro TSG gibt es? +select TSG.semester, +TSG.st_studstamm_nr, +TSG.st_studium_nr as st_studium_nr_tsg , +MSG.primaerflag_studien as primaerflag_studien_msg, +MSG.beginn_datum as beginn_datum_msg, +count(distinct MSG.st_studium_nr) as anzahl_st_studium_nr_msg into temp tmp_tsg2msg -from tmp_studien2 S2,tmp_studien S, costage_st_studiengaenge_mtsg M -where - S.st_sem_nr=S2.st_sem_nr - and S.st_studstamm_nr=S2.st_studstamm_nr -and S2.st_studiengang_nr=M.st_studiengang_nr_tsg -and S.status_historie=1 -and S.studiengangs_typ_kb='MSG' - and S.st_absz_nr=S2.st_absz_nr -and S.st_studiengang_nr_msg=M.st_studiengang_nr_msg +from tmp_studien_esg_tsg TSG,tmp_studien_msg MSG, costage_st_studiengaenge_mtsg MTSG +where TSG.studiengangs_typ_kb in ('TSG') +and TSG.semester=MSG.semester + and TSG.st_studstamm_nr=MSG.st_studstamm_nr +and TSG.st_studiengang_nr=MTSG.st_studiengang_nr_tsg + and TSG.st_absz_nr=MSG.st_absz_nr +and MSG.st_studiengang_nr=MTSG.st_studiengang_nr_msg group by 1,2,3,4,5 ; -create index tmp_ix222 on tmp_tsg2msg(primaerflag_studien); +--create index tmp_ix222 on tmp_tsg2msg(primaerflag_studien); +--select * from tmp_tsg2msg; ---nur Diagnose Einzelschritt: ---select st_studiengang_nr_msg,* from tmp_studien2 where semester=20222 ---; ---zuerst den jeweils letzten (=jüngsten) MSG zuweisen: --- update tmp_studien2 set st_studiengang_nr_msg=E.st_studiengang_nr_msg --- from tmp_last_msg_per_term E --- where E.st_sem_nr=tmp_studien2.st_sem_nr --- and E.st_studstamm_nr=tmp_studien2.st_studstamm_nr --- and E.st_absz_nr=tmp_studien2.st_absz_nr --- and tmp_studien2.studiengangs_typ_kb ='TSG' --- ; +drop table if exists tmp_studien_tsg; + +--studiengänge mit 1 MSG werden zuerst selektiert: +select TSG.*, T.primaerflag_studien_msg,MTSG.st_studiengang_nr_msg,MSG.st_studium_nr as st_studium_nr_msg, +MTSG.studienfach_sortierung +into temp tmp_studien_tsg +from tmp_studien_esg_tsg TSG, tmp_tsg2msg T, tmp_studien_msg MSG,costage_st_studiengaenge_mtsg MTSG +where T.semester=TSG.semester +and MSG.semester=TSG.semester +and T.st_studstamm_nr=TSG.st_studstamm_nr +and MSG.st_studstamm_nr=TSG.st_studstamm_nr +and MTSG.st_studiengang_nr_tsg=TSG.st_studiengang_nr +and MTSG.st_studiengang_nr_msg=MSG.st_studiengang_nr +and T.st_studium_nr_tsg=TSG.st_studium_nr +and TSG.studiengangs_typ_kb in ('TSG') +and T.anzahl_st_studium_nr_msg=1 +; ---TODO: langsam: +drop table if exists tmp_studien_tsg_mehrere_msg; + +--studiengänge mit 2 oder mehr MSG werden über min(studium) ermittelt: +select TSG.semester, +TSG.st_studstamm_nr, +TSG.st_studium_nr, +T.primaerflag_studien_msg, +TSG.st_studiengang_nr as st_studiengang_nr_tsg, +null::integer as st_studiengang_nr_msg, +null::integer as studienfach_sortierung, +min(MSG.st_studium_nr) as st_studium_nr_msg +into temp tmp_studien_tsg_mehrere_msg +from tmp_studien_esg_tsg TSG, tmp_tsg2msg T, tmp_studien_msg MSG,costage_st_studiengaenge_mtsg MTSG +where T.semester=TSG.semester +and MSG.semester=TSG.semester +and T.st_studstamm_nr=TSG.st_studstamm_nr +and MSG.st_studstamm_nr=TSG.st_studstamm_nr +and MTSG.st_studiengang_nr_tsg=TSG.st_studiengang_nr +and MTSG.st_studiengang_nr_msg=MSG.st_studiengang_nr +and T.st_studium_nr_tsg=TSG.st_studium_nr +and TSG.studiengangs_typ_kb in ('TSG') +and T.anzahl_st_studium_nr_msg>1 +group by 1,2,3 ,4,5 +; +update tmp_studien_tsg_mehrere_msg set st_studiengang_nr_msg=MSG.st_studiengang_nr, +studienfach_sortierung=MTSG.studienfach_sortierung +from tmp_studien_msg MSG, costage_st_studiengaenge_mtsg MTSG +where MSG.st_studiengang_nr=MTSG.st_studiengang_nr_msg +and tmp_studien_tsg_mehrere_msg.st_studiengang_nr_tsg=MTSG.st_studiengang_nr_tsg +and MSG.semester=tmp_studien_tsg_mehrere_msg.semester +and MSG.st_studstamm_nr=tmp_studien_tsg_mehrere_msg.st_studstamm_nr +and MSG.st_studium_nr=tmp_studien_tsg_mehrere_msg.st_studium_nr_msg; + +insert into tmp_studien_tsg +select TSG.*, T.primaerflag_studien_msg, +M.st_studiengang_nr_msg, +M.st_studium_nr_msg, +M.studienfach_sortierung +from tmp_studien_esg_tsg TSG, tmp_tsg2msg T, tmp_studien_tsg_mehrere_msg M +where T.semester=TSG.semester +and M.semester=TSG.semester +and T.st_studstamm_nr=TSG.st_studstamm_nr +and M.st_studstamm_nr=TSG.st_studstamm_nr +and T.st_studium_nr_tsg=TSG.st_studium_nr +and M.st_studium_nr=TSG.st_studium_nr +and TSG.studiengangs_typ_kb in ('TSG') +and T.anzahl_st_studium_nr_msg>1 +; + + + --1.prio: primärflag=1 + + +select 45,timestamp_str(now()) from xdummy; + +-- select * from tmp_studien_tsg; +-- +-- +-- update tmp_studien_tsg set +-- studienfach_sortierung=M.studienfach_sortierung, +-- studiengangs_identifikator_msg=S.studiengangs_identifikator +-- from tmp_tsg2msg T, tmp_studien S, +-- costage_st_studiengaenge_mtsg M +-- where M.st_studiengang_nr_tsg=tmp_studien2.st_studiengang_nr +-- and M.st_studiengang_nr_msg=S.st_studiengang_nr +-- and S.st_sem_nr=tmp_studien2.st_sem_nr +-- and S.st_studstamm_nr=tmp_studien2.st_studstamm_nr +-- and S.beginn_datum=T.beginn_datum +-- and T.st_studium_nr_tsg=tmp_studien2.st_studium_nr +-- and T.st_studium_nr_msg=S.st_studium_nr +-- and tmp_studien2.studiengangs_typ_kb ='TSG' +-- and T.primaerflag_studien=1; +-- +-- select 46,timestamp_str(now()) from xdummy; +-- +-- +-- --2. prio: ohne primärflag: +-- update tmp_studien2 set st_studiengang_nr_msg=M.st_studiengang_nr_msg, +-- studienfach_sortierung=M.studienfach_sortierung, +-- studiengangs_identifikator_msg=S.studiengangs_identifikator +-- from tmp_tsg2msg T, tmp_studien S, +-- costage_st_studiengaenge_mtsg M +-- where M.st_studiengang_nr_tsg=tmp_studien2.st_studiengang_nr +-- and M.st_studiengang_nr_msg=S.st_studiengang_nr +-- and S.st_sem_nr=tmp_studien2.st_sem_nr +-- and S.st_studstamm_nr=tmp_studien2.st_studstamm_nr +-- and S.beginn_datum=T.beginn_datum +-- and T.st_studium_nr_tsg=tmp_studien2.st_studium_nr +-- and T.st_studium_nr_msg=S.st_studium_nr +-- and tmp_studien2.studiengangs_typ_kb ='TSG' +-- and tmp_studien2.st_studiengang_nr_msg is null +-- ; +-- +-- drop table tmp_tsg2msg; +-- select 50,timestamp_str(now()) from xdummy; +-- +-- +-- --wenn der jüngste MSG nicht paßt, wird der nächste passende +-- --zugewiesen: -- update tmp_studien2 set st_studiengang_nr_msg=T.st_studiengang_nr_msg --- from tmp_studien T,tmp_last_msg_per_term E, costage_st_studiengaenge_mtsg M +-- from tmp_studien T,costage_st_studiengaenge_mtsg M -- where M.st_studiengang_nr_tsg=tmp_studien2.st_studiengang_nr -- and M.st_studiengang_nr_msg=T.st_studiengang_nr_msg -- and T.st_sem_nr=tmp_studien2.st_sem_nr -- and T.st_studstamm_nr=tmp_studien2.st_studstamm_nr --- and E.st_sem_nr=tmp_studien2.st_sem_nr --- and E.st_studstamm_nr=tmp_studien2.st_studstamm_nr --- and E.st_absz_nr=tmp_studien2.st_absz_nr --- and E.beginn_datum=T.beginn_datum -- and T.studiengangs_typ_kb='MSG' -- and T.st_absz_nr=tmp_studien2.st_absz_nr -- and T.st_studiengang_nr_msg is not null -- and tmp_studien2.studiengangs_typ_kb ='TSG' +-- and tmp_studien2.st_studiengang_nr_msg is null -- ; --- update tmp_studien2 set st_studiengang_nr_msg=T.st_studiengang_nr_msg - -- from tmp_studien T, - -- --tmp_last_msg_per_term E, - -- costage_st_studiengaenge_mtsg M - -- where M.st_studiengang_nr_tsg=tmp_studien2.st_studiengang_nr - -- and M.st_studiengang_nr_msg=T.st_studiengang_nr_msg - -- and T.st_sem_nr=tmp_studien2.st_sem_nr - -- and T.st_studstamm_nr=tmp_studien2.st_studstamm_nr - -- --and E.st_sem_nr=tmp_studien2.st_sem_nr - -- --and E.st_studstamm_nr=tmp_studien2.st_studstamm_nr - -- --and E.st_absz_nr=tmp_studien2.st_absz_nr - -- --and E.beginn_datum=T.beginn_datum - -- and T.status_historie=1 - -- and T.studiengangs_typ_kb='MSG' - -- and T.st_absz_nr=tmp_studien2.st_absz_nr - -- and T.st_studiengang_nr_msg is not null - -- and tmp_studien2.studiengangs_typ_kb ='TSG' - -- ; - --1.prio: primärflag=1 - - -select 45,timestamp_str(now()) from xdummy; - - - update tmp_studien2 set st_studiengang_nr_msg=M.st_studiengang_nr_msg, -studienfach_sortierung=M.studienfach_sortierung, -studiengangs_identifikator_msg=S.studiengangs_identifikator - from tmp_tsg2msg T, tmp_studien S, - costage_st_studiengaenge_mtsg M - where M.st_studiengang_nr_tsg=tmp_studien2.st_studiengang_nr - and M.st_studiengang_nr_msg=S.st_studiengang_nr - and S.st_sem_nr=tmp_studien2.st_sem_nr - and S.st_studstamm_nr=tmp_studien2.st_studstamm_nr - and S.beginn_datum=T.beginn_datum - and T.st_studium_nr_tsg=tmp_studien2.st_studium_nr - and T.st_studium_nr_msg=S.st_studium_nr - and tmp_studien2.studiengangs_typ_kb ='TSG' - and T.primaerflag_studien=1; - -select 46,timestamp_str(now()) from xdummy; - - - --2. prio: ohne primärflag: -update tmp_studien2 set st_studiengang_nr_msg=M.st_studiengang_nr_msg, -studienfach_sortierung=M.studienfach_sortierung, -studiengangs_identifikator_msg=S.studiengangs_identifikator - from tmp_tsg2msg T, tmp_studien S, - costage_st_studiengaenge_mtsg M - where M.st_studiengang_nr_tsg=tmp_studien2.st_studiengang_nr - and M.st_studiengang_nr_msg=S.st_studiengang_nr - and S.st_sem_nr=tmp_studien2.st_sem_nr - and S.st_studstamm_nr=tmp_studien2.st_studstamm_nr - and S.beginn_datum=T.beginn_datum - and T.st_studium_nr_tsg=tmp_studien2.st_studium_nr - and T.st_studium_nr_msg=S.st_studium_nr - and tmp_studien2.studiengangs_typ_kb ='TSG' - and tmp_studien2.st_studiengang_nr_msg is null - ; - -drop table tmp_tsg2msg; -select 50,timestamp_str(now()) from xdummy; - - ---wenn der jüngste MSG nicht paßt, wird der nächste passende ---zugewiesen: -update tmp_studien2 set st_studiengang_nr_msg=T.st_studiengang_nr_msg -from tmp_studien T,costage_st_studiengaenge_mtsg M -where M.st_studiengang_nr_tsg=tmp_studien2.st_studiengang_nr -and M.st_studiengang_nr_msg=T.st_studiengang_nr_msg -and T.st_sem_nr=tmp_studien2.st_sem_nr -and T.st_studstamm_nr=tmp_studien2.st_studstamm_nr -and T.studiengangs_typ_kb='MSG' -and T.st_absz_nr=tmp_studien2.st_absz_nr -and T.st_studiengang_nr_msg is not null -and tmp_studien2.studiengangs_typ_kb ='TSG' -and tmp_studien2.st_studiengang_nr_msg is null -; - - select 60,timestamp_str(now()) from xdummy; --statustyp bei TSG aus MSG nachladen: -update tmp_studien2 set studienstatustyp=S.studienstatustyp -from tmp_studien S -where tmp_studien2.st_studiengang_nr_msg=S.st_studiengang_nr -and tmp_studien2.st_studstamm_nr=S.st_studstamm_nr -and S.studiengangs_typ_kb ='MSG' -and tmp_studien2.studiengangs_typ_kb ='TSG' -and tmp_studien2.st_sem_nr=S.st_sem_nr -and S.status_historie=1 +update tmp_studien_tsg set studienstatustyp=S.studienstatustyp, +studiengangs_identifikator_msg=S.studiengangs_identifikator +from tmp_studien_msg S +where tmp_studien_tsg.st_studiengang_nr_msg=S.st_studiengang_nr +and tmp_studien_tsg.st_studstamm_nr=S.st_studstamm_nr +and tmp_studien_tsg.semester=S.semester ; select 70,timestamp_str(now()) from xdummy; --TSG werden nicht mehr gebraucht in tmp_studien -> schneller -delete from tmp_studien where studiengangs_typ_kb !='MSG'; - -create index tmp_ix4 on tmp_studien(st_sem_nr); -create index tmp_ix1 on tmp_studien(st_studiengang_nr); -create index tmp_ix2 on tmp_studien(st_studstamm_nr); -create index tmp_ix7 on tmp_studien(studienstatustyp); -create index tmp_ix8 on tmp_studien(st_studiengang_nr_msg); +-- delete from tmp_studien where studiengangs_typ_kb !='MSG'; +-- +-- create index tmp_ix4 on tmp_studien(st_sem_nr); +-- create index tmp_ix1 on tmp_studien(st_studiengang_nr); +-- create index tmp_ix2 on tmp_studien(st_studstamm_nr); +-- create index tmp_ix7 on tmp_studien(studienstatustyp); +-- create index tmp_ix8 on tmp_studien(st_studiengang_nr_msg); select 80,timestamp_str(now()) from xdummy; + + +--select * from tmp_studien +--where semester=20212; + + <#if K_COSTAGE_TSG_GENERATE == 1> ---was ist das min/max. Semester eines TSG TODO langsam? -select T.st_studiengang_nr as st_studiengang_nr_tsg, -T.st_studstamm_nr, -null::integer as st_studiengang_nr_msg_end, -min(ST.semester) as startsemester, -max(ST.semester) as endsemester_msg, -max(T.semester) as endsemester_tsg +--start generierung: +drop table if exists tmp_studien_msg_tsg; + +select MTSG.st_studiengang_nr_tsg as st_studiengang_nr_tsg, +MSG.st_studstamm_nr, +MSG.st_studiengang_nr as st_studiengang_nr_msg, +min(MSG.semester) as startsemester_msg, +max(MSG.semester) as endsemester_msg, +max(TSG.semester) as endsemester_tsg into temp tmp_studien_msg_tsg -from -tmp_studien2 T, costage_st_studiengaenge_mtsg M, tmp_studien ST --costage_st_studien ST -where ST.st_studiengang_nr=M.st_studiengang_nr_msg -and ST.st_studstamm_nr=T.st_studstamm_nr -and M.st_studiengang_nr_tsg=T.st_studiengang_nr -and T.studiengangs_typ_kb ='TSG' -and ST.studiengangs_typ_kb ='MSG' -and ST.studienstatustyp in ('U','B','E','I','X','Z') --nur tatsächlich eingeschrieben -and ST.status_historie=1 -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,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51 + from tmp_studien_msg MSG, costage_st_studiengaenge_mtsg MTSG , tmp_studien_tsg TSG +where MTSG.st_studiengang_nr_msg=MSG.st_studiengang_nr +and TSG.st_studiengang_nr=MTSG.st_studiengang_nr_tsg +and TSG.st_studstamm_nr=MSG.st_studstamm_nr +--and TSG.st_studium_nr_msg=MSG.st_studium_nr +and MSG.studienstatustyp in ('U','B','E','I','X','Z') --nur tatsächlich eingeschrieben; +group by 1,2,3 ; + +--was ist das min/max. Semester eines TSG TODO langsam? +-- select T.st_studiengang_nr as st_studiengang_nr_tsg, +-- T.st_studstamm_nr, +-- null::integer as st_studiengang_nr_msg_end, +-- min(ST.semester) as startsemester, +-- max(ST.semester) as endsemester_msg, +-- max(T.semester) as endsemester_tsg +-- into temp tmp_studien_msg_tsg +-- from +-- tmp_studien2 T, costage_st_studiengaenge_mtsg M, tmp_studien ST --costage_st_studien ST +-- where ST.st_studiengang_nr=M.st_studiengang_nr_msg +-- and ST.st_studstamm_nr=T.st_studstamm_nr +-- and M.st_studiengang_nr_tsg=T.st_studiengang_nr +-- and T.studiengangs_typ_kb ='TSG' +-- and ST.studiengangs_typ_kb ='MSG' +-- and ST.studienstatustyp in ('U','B','E','I','X','Z') --nur tatsächlich eingeschrieben +-- and ST.status_historie=1 +-- 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,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51 +-- ; + +--TODO: startsemester_msg mit aufnehmen + +--select * from tmp_studien_msg_tsg; + select 90,timestamp_str(now()) from xdummy; --letzten MSG zuweisen: -update tmp_studien_msg_tsg set st_studiengang_nr_msg_end=ST.st_studiengang_nr -from costage_st_studiengaenge_mtsg M, tmp_studien ST -where ST.st_studiengang_nr=M.st_studiengang_nr_msg -and M.st_studiengang_nr_tsg=tmp_studien_msg_tsg.st_studiengang_nr_tsg -and ST.st_studstamm_nr=tmp_studien_msg_tsg.st_studstamm_nr -and ST.semester = tmp_studien_msg_tsg.endsemester_msg -and ST.studiengangs_typ_kb ='MSG' -and ST.studienstatustyp in ('U','B','E','I','X','Z') --nur tatsächlich eingeschrieben -and ST.status_historie=1 -; +-- update tmp_studien_msg_tsg set st_studiengang_nr_msg_end=ST.st_studiengang_nr +-- from costage_st_studiengaenge_mtsg M, tmp_studien ST +-- where ST.st_studiengang_nr=M.st_studiengang_nr_msg +-- and M.st_studiengang_nr_tsg=tmp_studien_msg_tsg.st_studiengang_nr_tsg +-- and ST.st_studstamm_nr=tmp_studien_msg_tsg.st_studstamm_nr +-- and ST.semester = tmp_studien_msg_tsg.endsemester_msg +-- and ST.studiengangs_typ_kb ='MSG' +-- and ST.studienstatustyp in ('U','B','E','I','X','Z') --nur tatsächlich eingeschrieben +-- and ST.status_historie=1 +-- ; select 100,timestamp_str(now()) from xdummy; --nun fehlende Datensätze ermitteln: drop table if exists tmp_studien_msg_tsg_fehlend; + select distinct S.semester_tid as semester, S.semester_anfang, S.semester_ende, S.st_sem_nr, T.st_studstamm_nr, T.st_studiengang_nr_tsg, -T.st_studiengang_nr_msg_end, +T.st_studiengang_nr_msg, T.endsemester_tsg into temp tmp_studien_msg_tsg_fehlend from costage_st_semester S inner join tmp_studien_msg_tsg T on -(S.semester_tid between T.startsemester and T.endsemester_msg) --enthält alle möglichen TSG -left outer join tmp_studien2 T2 --enthält die tatsächlich vorhandenen TSG -on (T2.st_studiengang_nr=T.st_studiengang_nr_tsg -and T2.st_studstamm_nr=T.st_studstamm_nr -and T2.studiengangs_typ_kb ='TSG' -and S.semester_tid=T2.semester) +(S.semester_tid between T.startsemester_msg and T.endsemester_msg) --enthält alle möglichen TSG +left outer join tmp_studien_tsg TSG --enthält die tatsächlich vorhandenen TSG +on (TSG.st_studiengang_nr=T.st_studiengang_nr_tsg +and TSG.st_studstamm_nr=T.st_studstamm_nr +and S.semester_tid=TSG.semester) where -T2.st_studstamm_nr is null +TSG.st_studstamm_nr is null ; +-- select distinct S.semester_tid as semester, +-- S.semester_anfang, +-- S.semester_ende, +-- S.st_sem_nr, +-- T.st_studstamm_nr, +-- T.st_studiengang_nr_tsg, +-- T.st_studiengang_nr_msg_end, +-- T.endsemester_tsg +-- into temp tmp_studien_msg_tsg_fehlend +-- from costage_st_semester S inner join tmp_studien_msg_tsg T on +-- (S.semester_tid between T.startsemester and T.endsemester_msg) --enthält alle möglichen TSG +-- left outer join tmp_studien2 T2 --enthält die tatsächlich vorhandenen TSG +-- on (T2.st_studiengang_nr=T.st_studiengang_nr_tsg +-- and T2.st_studstamm_nr=T.st_studstamm_nr +-- and T2.studiengangs_typ_kb ='TSG' +-- and S.semester_tid=T2.semester) +-- where +-- T2.st_studstamm_nr is null +-- ; + drop table if exists tmp_studien_msg_tsg_fehlend2; @@ -447,9 +573,9 @@ T.st_studstamm_nr, T.fachkennzeichen, T.studienform_statistik_code, --T.st_studiengang_nr_msg, - F.st_studiengang_nr_msg_end, + F.st_studiengang_nr_msg, -- T.studiengangs_identifikator_msg, - T.st_studiengang_nr_tsg, + T.st_studiengang_nr as st_studiengang_nr_tsg, null::char(10) as hrst, null::integer as hssem, null::char(10) as studienstatustyp, @@ -470,9 +596,9 @@ null::integer as st_studienstatus_nr, max(T.semester) as letztes_tsg_semester, max(T.fachsemester) as fachsemester into temp tmp_studien_msg_tsg_fehlend2 -from tmp_studien_msg_tsg_fehlend F, tmp_studien2 T +from tmp_studien_msg_tsg_fehlend F, tmp_studien_tsg T where F.st_studstamm_nr=T.st_studstamm_nr -and F.st_studiengang_nr_tsg=T.st_studiengang_nr_tsg +and F.st_studiengang_nr_tsg=T.st_studiengang_nr and T.semester=F.endsemester_tsg 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,23,24,25,26,27,28,29 ,30 ,31,32 ,33 ,34,35 --,36 ; @@ -484,14 +610,14 @@ abm_art_s=S.abm_art_s, beginn_datum =S.beginn_datum, gueltig_ab=S.gueltig_ab, st_studienstatus_nr=S.st_studienstatus_nr - from tmp_studien2 S - where S.st_studiengang_nr_tsg=tmp_studien_msg_tsg_fehlend2.st_studiengang_nr_tsg + from tmp_studien_tsg S + where S.st_studiengang_nr=tmp_studien_msg_tsg_fehlend2.st_studiengang_nr_tsg and S.st_studstamm_nr=tmp_studien_msg_tsg_fehlend2.st_studstamm_nr and S.semester=tmp_studien_msg_tsg_fehlend2.letztes_tsg_semester ; --fehlende Semester nachtragen: -insert into tmp_studien2(semester, +insert into tmp_studien_tsg(semester, semester_anfang, semester_ende, st_absz_nr, @@ -501,8 +627,6 @@ studiengangs_bezeichnung, st_sem_nr, st_studium_nr, st_studstamm_nr, -st_studiengang_nr, -studiengangs_typ_kb, studienstatustyp, st_studienstatus_nr, beginn_datum, @@ -515,7 +639,7 @@ fachkennzeichen, studienform_statistik_code, st_studiengang_nr_msg, studiengangs_identifikator_msg, -st_studiengang_nr_tsg, +st_studiengang_nr, hrst, hssem, statustyp_tsg, @@ -542,8 +666,6 @@ F.studiengangs_bezeichnung, st_sem_nr, st_studium_nr, st_studstamm_nr, -st_studiengang_nr_tsg, -F.studiengangs_typ_kb, studienstatustyp, st_studienstatus_nr, beginn_datum, @@ -554,7 +676,7 @@ ca12_staat, second_nationality, F.fachkennzeichen, studienform_statistik_code, -st_studiengang_nr_msg_end, +st_studiengang_nr_msg, G.studiengangs_identifikator as studiengangs_identifikator_msg, st_studiengang_nr_tsg, hrst, @@ -573,25 +695,34 @@ fachsemester, studienfach_sortierung, letztes_tsg_semester from tmp_studien_msg_tsg_fehlend2 F, costage_st_studiengaenge G -where G.st_studiengang_nr=F.st_studiengang_nr_msg_end +where G.st_studiengang_nr=F.st_studiengang_nr_msg ; select 110,timestamp_str(now()) from xdummy; + + --statustyp und hrst nachladen: - update tmp_studien2 set studienstatustyp=S.studienstatustyp, + update tmp_studien_tsg set studienstatustyp=S.studienstatustyp, hrst=S.hrst - from tmp_studien S - where tmp_studien2.st_studiengang_nr_msg=S.st_studiengang_nr - and tmp_studien2.st_studstamm_nr=S.st_studstamm_nr - and S.studiengangs_typ_kb ='MSG' - and tmp_studien2.tsg_generated=1 - and tmp_studien2.st_sem_nr=S.st_sem_nr - --Defaultmäßig den letzten Status im Semester nehmen (status_historie=1) - and S.status_historie=1 - ; + from tmp_studien_msg S + where tmp_studien_tsg.st_studiengang_nr_msg=S.st_studiengang_nr + and tmp_studien_tsg.st_studstamm_nr=S.st_studstamm_nr + and tmp_studien_tsg.tsg_generated=1 + and tmp_studien_tsg.semester=S.semester + ; + + + +-- select * from tmp_studien_tsg +-- where 1=1 --semester<20212 +-- and studiengangs_identifikator like '%273' +-- ; + +--select * from tmp_studien_msg_tsg_fehlend2; + select 120,timestamp_str(now()) from xdummy; @@ -603,8 +734,148 @@ drop table tmp_studien_msg_tsg; -------------------------------------------------------------------- +--Zusammenführen ESG und TSG: + +select 130,timestamp_str(now()) from xdummy; + +drop table if exists tmp_studien2; + +select +semester, +semester_anfang, +semester_ende, +st_absz_nr, +st_skz_nr, +studiengangs_identifikator, +studiengangs_bezeichnung, +st_sem_nr, +st_studium_nr, +st_studstamm_nr, +studienstatustyp, +st_studienstatus_nr, +beginn_datum, +gueltig_ab, +matrikelnummer, +geschlecht, +ca12_staat, +second_nationality, +fachkennzeichen, +studienform_statistik_code, +st_studiengang_nr_msg, +studiengangs_identifikator_msg, +st_studiengang_nr, +hrst, +hssem, +statustyp_tsg, +tsg_generated, +primaerflag, +hzb_art_nr, +hzb_land_sub_r_nr , +hzb_jahr, +hzb_datum , +hzb_note, +hzb_land_nr, +abm_art_s, +fachsemester, +studienfach_sortierung, +letztes_tsg_semester, +'TSG'::char(10) as studiengangs_typ_kb, +null::integer as fach_nr, +null::integer as studiengang_nr, +null::char(10) as unikey, +null::integer as kz_rueck_beur_ein +into temp tmp_studien2 +from tmp_studien_tsg; + +--nun die ESG: +insert into tmp_studien2(semester, +semester_anfang, +semester_ende, +st_absz_nr, +st_skz_nr, +studiengangs_identifikator, +studiengangs_bezeichnung, +st_sem_nr, +st_studium_nr, +st_studstamm_nr, +studienstatustyp, +st_studienstatus_nr, +beginn_datum, +gueltig_ab, +matrikelnummer, +geschlecht, +ca12_staat, +second_nationality, +fachkennzeichen, +studienform_statistik_code, +st_studiengang_nr_msg, +studiengangs_identifikator_msg, +st_studiengang_nr, +hrst, +hssem, +statustyp_tsg, +tsg_generated, +primaerflag, +hzb_art_nr, +hzb_land_sub_r_nr , +hzb_jahr, +hzb_datum , +hzb_note, +hzb_land_nr, +abm_art_s, +fachsemester, +studienfach_sortierung, +letztes_tsg_semester, +studiengangs_typ_kb +) +select +semester, +semester_anfang, +semester_ende, +st_absz_nr, +st_skz_nr, +studiengangs_identifikator, +studiengangs_bezeichnung, +st_sem_nr, +st_studium_nr, +st_studstamm_nr, +studienstatustyp, +st_studienstatus_nr, +beginn_datum, +gueltig_ab, +matrikelnummer, +geschlecht, +ca12_staat, +second_nationality, +fachkennzeichen, +studienform_statistik_code, +null::integer as st_studiengang_nr_msg, +null::varchar(255) as studiengangs_identifikator_msg, +st_studiengang_nr, +hrst, +hssem, +null::char(10) as statustyp_tsg, +0::integer as tsg_generated, +primaerflag, +hzb_art_nr, +hzb_land_sub_r_nr , +hzb_jahr, +hzb_datum , +hzb_note, +hzb_land_nr, +abm_art_s, +fachsemester, +1::integer as studienfach_sortierung, +letztes_tsg_semester, +studiengangs_typ_kb +from tmp_studien_esg_tsg E +where E.studiengangs_typ_kb='ESG'; + drop table tmp_studien; +drop table tmp_studien_tsg; +drop table tmp_studien_esg_tsg; + --Ermittlung fach_nr: update tmp_studien2 set fach_nr=studienfach_sortierung; @@ -632,11 +903,6 @@ from cifx where key=400 and apnr=tmp_studien2.studienstatustyp ); --- update tmp_studien3 set kz_rueck_beur_ein=(select val(astat) --- from cifx where key=400 --- and apnr=tmp_studien3.statustyp_tsg --- ) --- where kz_rueck_beur_ein is null; update tmp_studien2 set hssem=H.anzahl_hochschulsemester @@ -648,6 +914,7 @@ and H.st_sem_nr=tmp_studien2.st_sem_nr update tmp_studien2 set studiengang_nr=1 where primaerflag=1; +drop table if exists tmp_primaer_msg; --Wenn Studium mit Primärflag ein TSG ist, wird die studiengang_nr auf alle anderen TSG des MSG ausgedehnt: select st_studstamm_nr,semester,st_studiengang_nr_msg into temp tmp_primaer_msg @@ -669,16 +936,62 @@ and T.st_studiengang_nr_msg=tmp_studien2.st_studiengang_nr_msg ; select 150,timestamp_str(now()) from xdummy; +drop table if exists tmp_studien3; --SPO-Version (letzte im jew. Semester) ermitteln: -select T.*,null::char(10) as po_stp_stp_version_kb, +select +semester, +semester_anfang, +semester_ende, +st_absz_nr, +st_skz_nr, +studiengangs_identifikator, +studiengangs_bezeichnung, +st_sem_nr, +T.st_studium_nr, +st_studstamm_nr, +studienstatustyp, +st_studienstatus_nr, +beginn_datum, +T.gueltig_ab, +matrikelnummer, +geschlecht, +ca12_staat, +second_nationality, +fachkennzeichen, +studienform_statistik_code, +st_studiengang_nr_msg, +studiengangs_identifikator_msg, +st_studiengang_nr, +hrst, +hssem, +statustyp_tsg, +tsg_generated, +primaerflag, +hzb_art_nr, +hzb_land_sub_r_nr , +hzb_jahr, +hzb_datum , +hzb_note, +hzb_land_nr, +abm_art_s, +fachsemester, +studienfach_sortierung, +letztes_tsg_semester, +studiengangs_typ_kb, +fach_nr, +studiengang_nr, +unikey, +kz_rueck_beur_ein, +null::char(10) as po_stp_stp_version_kb, null::integer as po_regelstudienzeit, +null::integer as kz_rueck_beur_ein_tsg, max(SPO.gueltig_ab) as spo_max_gueltig_ab into temp tmp_studien3 from tmp_studien2 T left outer join costage_st_studien_spoversionen SPO on (SPO.st_studium_nr=T.st_studium_nr and SPO.gueltig_ab < T.semester_ende) -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,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52 +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,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44 --,45,46,47,48,49,50,51,52 ; select 160,timestamp_str(now()) from xdummy; diff --git a/src-modules/module/costage/rohdaten/COSTAGE_ENV.sam b/src-modules/module/costage/rohdaten/COSTAGE_ENV.sam index c48974c..0d6364b 100644 --- a/src-modules/module/costage/rohdaten/COSTAGE_ENV.sam +++ b/src-modules/module/costage/rohdaten/COSTAGE_ENV.sam @@ -2,6 +2,8 @@ #Entladeumgebung für SuperX #Die folgenden Parameter müssen angepasst werden +VERSION=232 +export VERSION # SX_CLIENT ist die Client-Anwendung zum Zugriff auf die DB SX_CLIENT=jdbc; export SX_CLIENT diff --git a/src-modules/module/costage/rohdaten/costage_unload.xml b/src-modules/module/costage/rohdaten/costage_unload.xml index 9e38fac..09411dc 100644 --- a/src-modules/module/costage/rohdaten/costage_unload.xml +++ b/src-modules/module/costage/rohdaten/costage_unload.xml @@ -365,6 +365,22 @@ FROM px_st_studierendenstammdaten_v + + +