

create temp table tmp_st_studierendenstammdaten(
	st_studstamm_nr INTEGER  not null, 
matrikelnummer INTEGER , 
vorname VARCHAR(255) , 
familienname VARCHAR(255) , 
geburtsdatum timestamptz , 
st_land1_nr INTEGER , 
st_land2_nr INTEGER , 
geburt_st_land_nr INTEGER , 
personentyp_name VARCHAR(100) , 
personentyp_kb VARCHAR(10) , 
aufnahmedatum timestamptz , 
abmeldungsdatum timestamptz , 
geschlecht INTEGER , 
d_geburt DATE , 
ca12_staat INTEGER , 
second_nationality INTEGER , 
d_exmatr DATE , 
abm_art_p char(10),
semester_max INTEGER 
) 
;

--zuerst Ermittlung max. Semester
select S.st_studstamm_nr,max(SM.semester_tid)::integer as semester_max
into temp tmp_max
from costage_st_studierendenstammdaten_neu S,
costage_st_studien ST,
 costage_st_semester SM,
 costage_st_studienstatus SA
where S.st_studstamm_nr = ST.st_studstamm_nr
and SA.st_studium_nr=ST.st_studium_nr
and SA.st_sem_nr=SM.st_sem_nr
and SA.studienstatustyp not in ('a','o') 
and S.matrikelnummer is not null
group by 1
;




insert into tmp_st_studierendenstammdaten(
 st_studstamm_nr,
       matrikelnummer,
       vorname,
       familienname,
       geburtsdatum,
       st_land1_nr,
       st_land2_nr,
       geburt_st_land_nr,
       personentyp_name,
       personentyp_kb,
       aufnahmedatum,
       abmeldungsdatum,
       geschlecht,
 --      ca12_staat,
 --      second_nationality,
       d_geburt,
--       d_exmatr,
       semester_max)
select 
S.st_studstamm_nr,
       val(S.matrikelnummer),
       vorname,
       familienname,
       geburtsdatum,
       st_land1_nr,
       st_land2_nr,
       geburt_st_land_nr,
       personentyp_name,
       personentyp_kb,
       date_val(aufnahmedatum),
       abmeldungsdatum,
       (case when S.geschlecht='M' then 1
when S.geschlecht='W' then 2
when S.geschlecht='X' then 3
else 4 end)::smallint as geschlecht,
date(S.geburtsdatum) as d_geburt,
M.semester_max
FROM costage_st_laender L, costage_st_studierendenstammdaten_neu S left outer join tmp_max M
on (M.st_studstamm_nr=S.st_studstamm_nr)
where L.st_land_nr=S.st_land1_nr
and S.matrikelnummer is not null
 ;

 --TODO: statt semesterende das tatsächliche Abmeldungsdatum
update tmp_st_studierendenstammdaten set d_exmatr=date(S.semester_ende),
abm_art_p=A.st_abm_art_kurzbezeichnung
from costage_st_personen_abmeldungen A,costage_st_semester S
where A.st_sem_nr=S.st_sem_nr
and A.st_studstamm_nr=tmp_st_studierendenstammdaten.st_studstamm_nr
and S.semester_tid=tmp_st_studierendenstammdaten.semester_max
and A.person_flag='J';

 
update tmp_st_studierendenstammdaten set ca12_staat=val(L.statistik_code) 
from costage_st_laender L
where L.st_land_nr=tmp_st_studierendenstammdaten.st_land1_nr;

update tmp_st_studierendenstammdaten set second_nationality=val(L.statistik_code) 
from costage_st_laender L
where L.st_land_nr=tmp_st_studierendenstammdaten.st_land2_nr;

delete from costage_st_studierendenstammdaten
where 0 < (select count(*) from tmp_st_studierendenstammdaten) --bei CSV Upload kann die Tab. leer sein, daher abfangen
;

insert into costage_st_studierendenstammdaten(
 st_studstamm_nr,
       matrikelnummer,
       vorname,
       familienname,
       geburtsdatum,
       st_land1_nr,
       st_land2_nr,
       geburt_st_land_nr,
       personentyp_name,
       personentyp_kb,
       aufnahmedatum,
       abmeldungsdatum,
       geschlecht,
       ca12_staat,
       second_nationality,
       d_geburt,
       d_exmatr,
       abm_art_p,
       semester_max)
select 
st_studstamm_nr,
       matrikelnummer,
       vorname,
       familienname,
       geburtsdatum,
       st_land1_nr,
       st_land2_nr,
       geburt_st_land_nr,
       personentyp_name,
       personentyp_kb,
       aufnahmedatum,
       abmeldungsdatum,
       geschlecht,
       ca12_staat,
       second_nationality,
       d_geburt,
       d_exmatr,
       abm_art_p,
       semester_max
FROM tmp_st_studierendenstammdaten
 ;

drop table tmp_max;
drop table tmp_st_studierendenstammdaten;


