Schnittstelle CampusOnline (TU Graz) zu SuperX-Modul COSTAGE http://www.superx-projekt.de/doku/costage_modul/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

537 lines
15 KiB

--freemarker template
drop table if exists tmp_studien;
drop table if exists tmp_studien2;
SELECT
SM.semester_tid as semester,
SG.st_absz_nr,
SG.st_skz_nr,
SG.studiengangs_identifikator,
SG.studiengangs_bezeichnung,
SM.st_sem_nr,
ST.st_studium_nr,
S.st_studstamm_nr,
ST.st_studiengang_nr,
SG.studiengangs_typ_kb,
SA.studienstatustyp,
SA.st_studienstatus_nr,
SA.beginn_datum,
SA.gueltig_ab,
val(S.matrikelnummer) as matrikelnummer,
S.geschlecht,
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,
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,
null::char(10) as hrst,
null::integer as fachsemester,
null::integer as hssem,
(case when SG.studiengangs_typ_kb in ('TSG') then SA.studienstatustyp else null::char(10) end) as statustyp_tsg,
0::smallint as tsg_generated,
--0::smallint as primaerflag,
null::integer as studiengang_nr,
null::integer as fach_nr,
null::char(10) as unikey,
null::date as anfdat,
null::date as ruebeudat,
null::date as endedat,
null::smallint as kz_rueck_beur_ein,
null::char(10) as hzb_art,
rank () over (partition by SM.st_sem_nr, S.st_studstamm_nr, SG.studiengangs_identifikator order by SA.gueltig_ab desc) as status_historie
into temp tmp_studien
FROM costage_st_studierendenstammdaten S,
costage_st_studien ST,
costage_st_semester SM,
costage_st_studiengaenge SG ,
costage_st_studienstatus SA
where
S.st_studstamm_nr = ST.st_studstamm_nr
and ST.st_studiengang_nr=SG.st_studiengang_nr
and S.matrikelnummer is not null
--and SM.semester_tid >= 20171
-- and SM.semester_tid <= 20171
and SG.studiengangs_typ_kb in ('ESG','TSG','MSG')
and SA.st_studium_nr=ST.st_studium_nr
and SA.st_sem_nr=SM.st_sem_nr
and SA.gueltig_ab <=SM.semester_ende --nur letzter Status im jew. Semester interessiert, nicht danach
and SA.studienstatustyp not in ('a','o')
and ${COSTAGE_STUDENT_FILTER}
--group by 1,2,3,4,5,6,7,8,9,10,11,12,13
;
update tmp_studien
set hrst=H.hoererstatus_kb
from costage_st_hoererstatus H
where tmp_studien.st_studstamm_nr = H.st_studstamm_nr
and tmp_studien.st_sem_nr = H.st_sem_nr
;
update tmp_studien
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
and F.fachsemestertyp='FS'
;
update tmp_studien
set hzb_art=H.hzb_art_stla_code
from costage_bw_bewerb_hzb H, costage_bw_bewerbungen BW
where tmp_studien.st_studstamm_nr = BW.st_studstamm_nr
and BW.nr=H.bw_bewrbng_nr
;
select T.*,1::smallint as primaerflag
into temp tmp_studien2
from tmp_studien T, costage_st_hauptstudien H
where 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
and status_historie=1
and T.studiengangs_typ_kb in ('ESG','TSG')
;
--Studiengänge ohne Primärflag:
insert into tmp_studien2
select T.*,0::smallint as primaerflag
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 H.st_studstamm_nr is null
;
--Ermittlung msg:
update tmp_studien2 set st_studiengang_nr_msg=M.st_studiengang_nr_msg
from costage_st_studiengaenge_mtsg M, costage_st_studien ST
where ST.st_studiengang_nr=M.st_studiengang_nr_msg
and ST.st_studstamm_nr=tmp_studien2.st_studstamm_nr
and M.st_studiengang_nr_tsg=tmp_studien2.st_studiengang_nr
and tmp_studien2.studiengangs_typ_kb ='TSG'
;
update tmp_studien2 set studienstatustyp=null;
--Ermittlung status bei TSG aus MSG:
update tmp_studien2 set studienstatustyp=T.studienstatustyp
from tmp_studien T
where T.st_studiengang_nr=tmp_studien2.st_studiengang_nr_msg
and T.st_studstamm_nr=tmp_studien2.st_studstamm_nr
and T.st_sem_nr=tmp_studien2.st_sem_nr
and T.status_historie=1
and tmp_studien2.studiengangs_typ_kb ='TSG'
;
drop table if exists tmp_fehlend;
--fehlende TSG nachtragen:
select T.st_studium_nr,
T.studienstatustyp,
T.st_studienstatus_nr,
T.st_studiengang_nr_msg,
T.st_sem_nr,
T.st_studstamm_nr,
T.beginn_datum,
T.gueltig_ab
into temp tmp_fehlend
from tmp_studien T
left outer join tmp_studien2 T2
on (T2.st_studiengang_nr_msg=T.st_studiengang_nr
and T2.st_studstamm_nr=T.st_studstamm_nr
and T2.studiengangs_typ_kb ='TSG'
and T.st_sem_nr=T2.st_sem_nr)
where T2.st_studstamm_nr is null
and T.studienstatustyp in ('B','E','I') --nur tatsächlich eingeschrieben
--and T.st_sem_nr=180
;
insert into tmp_studien2(semester,
st_absz_nr,
st_skz_nr,
studiengangs_identifikator,
studiengangs_bezeichnung,
st_sem_nr,
st_studium_nr,
st_studstamm_nr,
st_studiengang_nr,
studiengangs_typ_kb,
studienstatustyp,
st_studienstatus_nr,
beginn_datum,
gueltig_ab,
matrikelnummer,
geschlecht,
ca12_staat,
second_nationality,
fachkennzeichen,
studienform_statistik_code,
st_studiengang_nr_msg,
st_studiengang_nr_tsg,
hrst,
hssem,
statustyp_tsg,
tsg_generated,
primaerflag,
hzb_art,
fachsemester)
select E.semester_tid,
st_absz_nr,
S.st_skz_nr,
S.studiengangs_identifikator,
S.studiengangs_bezeichnung,
T.st_sem_nr,
S.st_studium_nr,
S.st_studstamm_nr,
S.st_studiengang_nr,
S.studiengangs_typ_kb,
T.studienstatustyp,
T.st_studienstatus_nr,
T.beginn_datum,
T.gueltig_ab,
S.matrikelnummer,
S.geschlecht,
S.ca12_staat,
S.second_nationality,
S.fachkennzeichen,
S.studienform_statistik_code,
S.st_studiengang_nr_msg,
S.st_studiengang_nr_tsg,
S.hrst,
S.hssem,
null::char(10) as statustyp_tsg,
1 as tsg_generated,
S.primaerflag,
S.hzb_art,
max(S.fachsemester)
from tmp_fehlend T, tmp_studien2 S,costage_st_semester E
where T.st_studiengang_nr_msg=S.st_studiengang_nr_msg
and T.st_studstamm_nr=S.st_studstamm_nr
and S.studiengangs_typ_kb ='TSG'
and T.st_sem_nr != S.st_sem_nr
and E.st_sem_nr=T.st_sem_nr
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
;
--statustyp_stg nachladen:
update tmp_studien2 set statustyp_tsg=S.statustyp_tsg
from tmp_studien S
where tmp_studien2.st_studium_nr=S.st_studium_nr
and tmp_studien2.st_studstamm_nr=S.st_studstamm_nr
and S.studiengangs_typ_kb ='TSG'
and tmp_studien2.tsg_generated=1
and tmp_studien2.fachsemester=S.fachsemester
;
drop table tmp_studien;
--Ermittlung fach_nr:
update tmp_studien2 set fach_nr=M.studienfach_sortierung
from costage_st_studiengaenge_mtsg M
where M.st_studiengang_nr_msg=tmp_studien2.st_studiengang_nr_msg
and M.st_studiengang_nr_tsg=tmp_studien2.st_studiengang_nr
and tmp_studien2.studiengangs_typ_kb ='TSG'
;
update tmp_studien2 set fach_nr=1
where fach_nr is null;
update tmp_studien2 set unikey=K.unikey
from costage_st_studiengaenge G, costage_st_studienkennzahlen K
where G.st_studiengang_nr=tmp_studien2.st_studiengang_nr
and K.st_skz_nr=G.st_skz_nr
;
update tmp_studien2 set kz_rueck_beur_ein=(select val(astat)
from cifx where key=400
and apnr=tmp_studien2.studienstatustyp
);
update tmp_studien2
set hssem=1 where kz_rueck_beur_ein=1;
;
update tmp_studien2 set studiengang_nr=1 where primaerflag=1;
--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
from tmp_studien2
where studiengangs_typ_kb ='TSG'
and st_studiengang_nr_msg is not null
and primaerflag=1;
--select * from tmp_primaer_msg;
update tmp_studien2 set studiengang_nr=1 where primaerflag=0
and studiengangs_typ_kb ='TSG'
and exists (select st_studiengang_nr_msg
from tmp_primaer_msg T
where T.st_studstamm_nr=tmp_studien2.st_studstamm_nr
and T.semester=tmp_studien2.semester
and T.st_studiengang_nr_msg=tmp_studien2.st_studiengang_nr_msg
)
;
select distinct st_studiengang_nr_msg, matrikelnummer, semester
into temp temp_tmp_studien2
from tmp_studien2
where primaerflag =1
and studiengangs_typ_kb ='TSG';
delete from costage_st_studien_aggr
--provisorisch in Testphase:
where ${COSTAGE_STUDENT_FILTER};
create index ix_tmp_studien2 on tmp_studien2(kz_rueck_beur_ein)
;
insert into costage_st_studien_aggr(
st_studium_nr,
st_studstamm_nr,
matrikelnummer,
st_studiengang_nr,
st_studienstatus_nr,
statustyp,
statustyp_tsg,
tsg_generated,
hrst,
semester,
fachsemester,
hssem,
primaerflag,
studiengang_nr,
fach_nr,
unikey,
anfdat,
ruebeudat,
endedat,
stufrm,
kz_rueck_beur_ein,
hzb_art,
summe
)
select st_studium_nr,
st_studstamm_nr,
matrikelnummer,
st_studiengang_nr,
st_studienstatus_nr,
studienstatustyp,
statustyp_tsg,
tsg_generated,
hrst,
semester,
fachsemester,
hssem,
primaerflag,
--Nun ist studiengang_nr=1 definiert. Die restlichen werden mit RANK ermittelt:
(case when studiengang_nr =1 then studiengang_nr
else
dense_rank () over (partition by semester, st_studstamm_nr,studiengang_nr order by
(case when studiengangs_typ_kb='TSG' then st_studiengang_nr_msg else st_studium_nr end ))+1
end)
as studiengang_nr,
--AP Code:
-- (case when studiengangs_typ_kb ='TSG' then
-- (case when primaerflag =1
-- then 1
-- else
-- (case when st_studiengang_nr_msg in (select distinct T2.st_studiengang_nr_msg from temp_tmp_studien2 T2
-- where tmp_studien2.matrikelnummer = T2.matrikelnummer and tmp_studien2.semester = T2.Semester)
-- then 1
-- else
-- dense_rank () over (partition by semester, st_studstamm_nr,studiengang_nr order by(case when studiengangs_typ_kb='TSG' then st_absz_nr else st_studium_nr end ))+1
-- end )end)
-- else
-- (case when primaerflag =1
-- then 1
-- else
-- dense_rank () over (partition by semester, st_studstamm_nr,studiengang_nr order by( case when studiengangs_typ_kb='TSG' then st_absz_nr else st_studium_nr end ))+1
-- end) end )
--as studiengang_nr2,
(case when primaerflag =1 then 1
else
dense_rank () over (partition by semester, st_studstamm_nr,studiengang_nr
order by primaerflag desc,fach_nr)
end) as fach_nr,
unikey,
beginn_datum as anfdat,
(case when studienstatustyp not in ('Z','X') then null::date
else gueltig_ab end) as ruebeudat,
(case when studienstatustyp in ('Z','X') then gueltig_ab
else null::date end) as endedat,
studienform_statistik_code as stufrm,
kz_rueck_beur_ein,
hzb_art,
1 as summe
from tmp_studien2
-- where semester = 20202
--and matrikelnummer = '5545242'
where kz_rueck_beur_ein is not null
;
-- The below code appends the data for the records having kz_rueck_beur_ein as NULL, this data could be helpful for other diagonostic purpose; here this is segregated
-- from above to accomodate ranking in studiengangNummer field
insert into costage_st_studien_aggr(
st_studium_nr,
st_studstamm_nr,
matrikelnummer,
st_studiengang_nr,
st_studienstatus_nr,
statustyp,
statustyp_tsg,
tsg_generated,
hrst,
semester,
fachsemester,
hssem,
primaerflag,
studiengang_nr,
fach_nr,
unikey,
anfdat,
ruebeudat,
endedat,
stufrm,
kz_rueck_beur_ein,
hzb_art,
summe
)
select st_studium_nr,
st_studstamm_nr,
matrikelnummer,
st_studiengang_nr,
st_studienstatus_nr,
studienstatustyp,
statustyp_tsg,
tsg_generated,
hrst,
semester,
fachsemester,
hssem,
primaerflag,
--Nun ist studiengang_nr=1 definiert. Die restlichen werden mit RANK ermittelt:
-- (case when studiengang_nr is not null then studiengang_nr
-- else
-- dense_rank () over (partition by semester, st_studstamm_nr,studiengang_nr order by
-- (case when studiengangs_typ_kb='TSG' then st_absz_nr else st_studium_nr end ))+1
-- end)
-- as studiengang_nr,
cast (NULL as int) as studiengang_nr2,
(case when primaerflag =1 then 1
else
dense_rank () over (partition by semester, st_studstamm_nr,studiengang_nr
order by primaerflag desc, fach_nr)
end) as fach_nr,
unikey,
beginn_datum as anfdat,
(case when studienstatustyp not in ('Z','X') then null::date
else gueltig_ab end) as ruebeudat,
(case when studienstatustyp in ('Z','X') then gueltig_ab
else null::date end) as endedat,
studienform_statistik_code as stufrm,
kz_rueck_beur_ein,
hzb_art,
1 as summe
from tmp_studien2
--where semester = 20202
-- and matrikelnummer = '5847370'
where kz_rueck_beur_ein is null
;
--HZB Data:
update costage_st_studien_aggr set hzb_art=H.hzb_art_stla_code,
hzb_datum=H.zeugnisdatum,
hzb_note=H.hzb_note,
hzb_ort=H.land_sub_r_nr,
hzb_staat=H.land_nr
from costage_bw_bewerb_hzb H, costage_bw_bewerbungen BW
where BW.nr=H.bw_bewrbng_nr
and costage_st_studien_aggr.st_studstamm_nr=BW.st_studstamm_nr
;
--Abmeldungsart:
--zuerst personbezogen:
update costage_st_studien_aggr set abm_art_p=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=costage_st_studien_aggr.semester
and P.st_studium_nr=costage_st_studien_aggr.st_studium_nr
and A.st_abm_art_kurzbezeichnung=P.st_abm_art_kurzbezeichnung
and A.bezug='P'
;
--dann studienbezogen:
update costage_st_studien_aggr 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=costage_st_studien_aggr.semester
and P.st_studium_nr=costage_st_studien_aggr.st_studium_nr
and A.st_abm_art_kurzbezeichnung=P.st_abm_art_kurzbezeichnung
and A.bezug='S'
;
--Beurlaubungs-Art:
update costage_st_studien_aggr set urlaub_art=U.st_urlaub_typ_nr
from costage_st_urlaube U, costage_st_semester S
where S.st_sem_nr=U.st_sem_nr
and S.semester_tid=costage_st_studien_aggr.semester
and U.st_studium_nr=costage_st_studien_aggr.st_studium_nr
;
--Wohnorte:
--zuerst Semesterwohnsitz Ort:
update costage_st_studien_aggr set adresse_ort_s=A.land_kfz_kennzeichen_subregion
from costage_st_adressen A
where A.st_studstamm_nr=costage_st_studien_aggr.st_studstamm_nr
and A.st_adresse_typ='S'
;
--dann Semesterwohnsitz Staat:
update costage_st_studien_aggr set adresse_staat_s=A.st_land_nr
from costage_st_adressen A
where A.st_studstamm_nr=costage_st_studien_aggr.st_studstamm_nr
and A.st_adresse_typ='H'
;
--dann Heimatwohnsitz Ort:
update costage_st_studien_aggr set adresse_ort_h=A.land_kfz_kennzeichen_subregion
from costage_st_adressen A
where A.st_studstamm_nr=costage_st_studien_aggr.st_studstamm_nr
and A.st_adresse_typ='H'
;
--dann Heimatwohnsitz Staat:
update costage_st_studien_aggr set adresse_staat_h=A.st_land_nr
from costage_st_adressen A
where A.st_studstamm_nr=costage_st_studien_aggr.st_studstamm_nr
and A.st_adresse_typ='H'
;
drop table tmp_studien2;
drop table tmp_primaer_msg;
drop table temp_tmp_studien2;
drop table tmp_fehlend;