Tilastokeskuksen tutkintotiedonkeruu yliopistot Ks. http://stat.fi/keruu/ylit/ "Tiedonkeruu koskee kaikkia yliopistoissa vuonna [vuosi] suoritettuja tutkintoja." Poiminta Alustus Perusjoukon valinta Tietueet Yliopisto (kk Henkilötunnus (ht Kirjoihintulo yliopistoon (kirtu Opiskeluoikeuden alkaminen nykyisessä tutkinnossa (opoik Aineenopettajan pedagogiset opinnot (sv Opiskelumuoto (om Erikoistumiskoulutus, ei-tutkintokoulutus 999999 Tutkinnon suorituspäivämäärä (suorpvm Koulutusyksikön sijaintikunta (kkun Sukupuoli (sp Äidinkieli (aikieliy Kansalaisuus (kansaly Sukunimi (snimi Etunimet (enimi Lukukausimaksukokeilu ja maksullinen tilauskoulutus (lkmmt Koulutuskoodi (koulky Opintopisteet Omassa yliopistossa suoritetut opintopisteet (pl. avoin yliopisto-opetus (opoylio Avoimessa yliopisto-opetuksessa suoritetut opintopisteet (sekä omat että muu yliopisto (opaylio Muissa yliopistoissa suoritetut opintopisteet (pl. avoin yliopisto (opmylio Ammattikorkeakouluissa suoritetut opintopisteet (opamk Ulkomailla suoritetut opintopisteet (opulk Muualla suoritetut opintopisteet (opmuu Opintopisteet yhteensä (opyht Tutkinnon opintopisteet ( Tulos Tarkistus Muutoshistoria 20.1.2017 :: Ohjausala ja erikoistumikoulutus koodi :: wiki-versio 32 22.1.2016 :: Erikoistumikoulutus :: wiki-versio 31 12.1.2016 :: Erikois[hammas]lääkärit :: wiki-versio 29 12.10.2015 :: Päivitetty "Aineenopettajan pedagogiset opinnot (sv" poimintaa :: wiki-versio 22 28.1.2015 :: Opintopisteitä ei merkitä jatkotutkinnoille :: wiki-versio 21 27.1.2015 :: Opintosuoritusten valinta opintopistelaskentaan: hierarkia vs. opiskeluoikeus-kytkös :: wiki-versio 20 26.1.2015 :: Opintosuoritusten lehtitason määrityksen korjaus :: wiki-versio 19 15.1.2015 :: Pätevyydet katsotaan koko opintosuoritusten hierarkiasta 12.1.2015 :: Tutkinto-opintosuorituksen opintopisteet :: wiki-versio 18 18-19.12.2014 :: Opintopistekertymiä kehitetty :: wiki-versio 17 15.12.2014 :: Parannettu opintopisteiden jakautumisen poimintaa :: wiki-versio 16 8-9.12.2014 :: Korjauksia ja CSV-muoto :: wiki-versio 13 17.11.2014 :: Automaatin aika :: wiki-versio 7 Alustus Dokumentaation tueksi on tuotu SQL-kielisiä kyselyitä, joissa taustalla on temp-tietokantataulu #tktutk johon tiedot kerätään, joka vastaa tietuekuvaukseltaan hyvin lähelle sitä mikä Tilastokeskuksen tiedonkeruissa halutaan, sekä yksirivinen temp-tietokantataulu #param, jossa on tieto nyt käsittelyssä olevasta korkeakoulusta sekä tiedonkeruun kannalta oleellisia muita tietoja kuten tilastointivuosi (VUOSI. SQL -- Temp-taulu tietojen valintaa varten -- NB! param-taulussa saa olla vain yksi rivi! create table #param ( vuosi varchar(4, org varchar(30,--kk-lyhenne (DB-nimi Expand source
kk varchar(2,--yliopisto tilpvm date,--tilastointipäivä insert into #param (vuosi,org,kk,tilpvm select @vuosi as vuosi,upper(db_name( as org,(case when UPPER(DB_NAME( = 'AA' then '03' when UPPER(DB_NAME( = 'AYO' then '25' when UPPER(DB_NAME( = 'HY' then '01' when UPPER(DB_NAME( = 'ISY' then '26' when UPPER(DB_NAME( = 'JY' then '06' when UPPER(DB_NAME( = 'LAY' then '21' when UPPER(DB_NAME( = 'LTY' then '14' when UPPER(DB_NAME( = 'OY' then '04' when UPPER(DB_NAME( = 'SHH' then '10' when UPPER(DB_NAME( = 'TAIY' then '28' when UPPER(DB_NAME( = 'TaY' then '05' when UPPER(DB_NAME( = 'TTY' then '15' when UPPER(DB_NAME( = 'TY' then '27' when UPPER(DB_NAME( = 'VY' then '13' else 'NA' end as kk,@vuosi+'-09-20' as tilpvm --select * from #param -- Temp-taulu tiedonkeruun tietoja varten create table #tktutk ( kk varchar(2,--yliopisto ht varchar(11,--henkilötunnus kirtu varchar(5,--kirjoihintulo yliopistoon opoik varchar(5,--opiskeluoikeuden alkaminen nykyisessä tutkinnossa sv varchar(3,--aineenopettajan pedagogiset opinnot om varchar(1,--opiskelumuoto suorpvm varchar(8,--tutkinnon suorituspäivämäärä kkun varchar(3,--koulutusyksikön sijaintikunta sp varchar(1,--sukupuoli aikieliy varchar(1,--äidinkieli kansaly varchar(3,--kansalaisuus snimi nvarchar(255,--sukunimi enimi nvarchar(255,--etunimet --NB! pituus opoylio varchar(4,--omassa yliopistossa suoritetut opintopisteet (pl. avoin yliopisto-opetus opaylio varchar(3,--avoimessa yliopisto-opetuksessa suoritetut opintopisteet (sekä omat että muu yliopisto opmylio varchar(3,--muissa yliopistoissa suoritetut opintopisteet (pl. avoin yliopisto opamk varchar(3,--ammattikorkeakouluissa suoritetut opintopisteet opulk varchar(3,--ulkomailla suoritetut opintopisteet opmuu varchar(3,--muualla suoritetut opintopisteet opyht varchar(4,--opintopisteet yhteensä lkmmt varchar(1,--lukukausimaksukokeilu ja maksullinen tilauskoulutus koulky varchar(6,--koulutuskoodi -- optutk varchar(4,--tutkinto-opintosuorituksen opintopisteet
-- ohjauksenala ekkoodi varchar(3, -- OKM Ohjauksen ala varchar(3, -- Erikoistumiskoulutuksen koodi -- opiskelijaavain varchar(100, opintosuoritusavain varchar(100, opiskeluoikeusavain varchar(100, suorituspaivamaara date, opiskelija_id int, opintosuoritus_id int,
opiskeluoikeus_id int Perusjoukon valinta Haetaan tietovarannosta kaikki tutkinto-lajiset opintosuoritukset, jotka on suoritettu tilastointivuoden aikana. Liitetään suoritukseen opiskelija (henkilö, josta saadaan perustietoja: Korkeakoulu (kk Henkilötunnus (ht Sukupuoli (sp Sukunimi (snimi Etunimet (enimi Kansalaisuus (kansaly :: nb! vain suomalaiset Äidinkieli (aikieliy Kirjoilletulo (kirtu :: tässä päätellään lukukausi kuukauden perusteella: suurempi tai yhtäsuuri kuin elokuu => syyslukukausi, muuten kevätlukukausi SQL --- -- Lisätään perustiedot (henkilö, opiskelija -- * täytyy olla tutkinto --- insert into #tktutk ( kk,ht,sp,snimi,enimi,kansaly,aikieliy,kirtu,suorpvm,suorituspaivamaara,opiskelijaavain,opiskelija_id,opintosuoritusavain,opintosuoritus_id,opiskeluoikeusavain,opiskeluoikeus_id select kk = (select kk from #param,ht = h.henkilotunnus,sp = (select top 1 k.koodi from Sukupuoli k where k.id=h.sukupuoliid,snimi = h.sukunimi,enimi = h.etunimet,kansaly = --nb! vain suomalaiset tässä (jää null! (select top 1 m.koodi from Henkilon_maa hm inner join Maa m on m.id=hm.maaid inner join Maan_rooli mr on mr.id=hm.maan_rooliid where hm.henkiloid=h.id --sido and mr.koodi='1' --Kansalaisuus and m.koodi='246' --Suomi,aikieliy = (select top 1 case k.koodi when 'fi' then '1' when 'sv' then '2' else '3' end from Kieli k where k.id=h.kieliid,kirtu = (cast(year(p.kirjoihintulopaivamaara as varchar +(case -- 8-12 (elo-joulu: syksy when month(p.kirjoihintulopaivamaara>=8 then '2' Expand source
-- 1-7 (tammi-heinä: kevät else '1' end,suorpvm = convert(varchar,s.suorituspaivamaara,112 --112=yyyymmdd --,s.suorituspaivamaara --,p.avain opiskelijaavain,p.id opiskelija_id,s.avain opintosuoritusavain,s.id opintosuoritus_id,o.avain opiskeluoikeusavain,o.id opiskeluoikeus_id from Henkilo h inner join Opiskelija p on p.henkiloid=h.id inner join Opintosuoritus s on s.opiskelijaid=p.id inner join Opintosuorituksen_laji ol on ol.id=s.opintosuorituksen_lajiid left join Opiskeluoikeus o on o.id=s.opiskeluoikeusid where 1=1 -- tutkinto-lajinen and ol.koodi=1
-- suoritettu tilvuonna and year(s.suorituspaivamaara=(select vuosi from #param Heti perään lisätään perusjoukkoon erikoislääkärit ja erikoishammaslääkärit siten, että katsotaan muu opintosuoritus -lajisista suorituksista sellaiset joihin liittyy varta vasten oleva pätevyys-koodiston arvo 'ela' tai 'eha', ja suorituspäivä on tilastointivuoden aikana. Yllä mainitun tietojoukon lisäksi päätellään pätevyyskoodin perusteella koulutuskoodi siten, että pätevyys 'ela' => '775101' ja 'eha' => '775201'. SQL -- lisätään erikoislääkärit ja -hammaslääkärit -- nb! lisätään myös koulutuskoodi, joka päätellään pätevyyden kautta! insert into #tktutk ( kk,ht,sp,snimi,enimi,kansaly,aikieliy,kirtu,suorpvm,suorituspaivamaara,koulky,opiskelijaavain,opiskelija_id,opintosuoritusavain,opintosuoritus_id,opiskeluoikeusavain,opiskeluoikeus_id select kk = (select kk from #param,ht = h.henkilotunnus,sp = (select top 1 k.koodi from Sukupuoli k where k.id=h.sukupuoliid,snimi = h.sukunimi,enimi = h.etunimet,kansaly = --nb! vain suomalaiset tässä (jää null! (select top 1 m.koodi from Henkilon_maa hm inner join Maa m on m.id=hm.maaid inner join Maan_rooli mr on mr.id=hm.maan_rooliid where hm.henkiloid=h.id --sido and mr.koodi='1' --Kansalaisuus and m.koodi='246' --Suomi,aikieliy = (select top 1 case k.koodi when 'fi' then '1' when 'sv' then '2' else '3' end from Kieli k where k.id=h.kieliid,kirtu = (cast(year(p.kirjoihintulopaivamaara as varchar +(case -- 8-12 (elo-joulu: syksy when month(p.kirjoihintulopaivamaara>=8 then '2' -- 1-7 (tammi-heinä: kevät else '1' end,suorpvm = convert(varchar,s.suorituspaivamaara,112 --112=yyyymmdd --,s.suorituspaivamaara --,koulky = ( case kp.koodi when 'ela' then '775101' when 'eha' then '775201' end Expand source
--,p.avain opiskelijaavain,p.id opiskelija_id,s.avain opintosuoritusavain,s.id opintosuoritus_id,o.avain opiskeluoikeusavain,o.id opiskeluoikeus_id from Henkilo h inner join Opiskelija p on p.henkiloid=h.id inner join Opintosuoritus s on s.opiskelijaid=p.id inner join Opintosuorituksen_laji ol on ol.id=s.opintosuorituksen_lajiid -- inner join Henkilon_patevyys hp on hp.henkiloid=h.id and hp.opintosuoritusid=s.id inner join Patevyys kp on kp.id=hp.patevyysid left join Opiskeluoikeus o on o.id=s.opiskeluoikeusid where 1=1 -- tutkinto- TAI muu-lajinen and ol.koodi in ('1','2' -- suoritettu tilvuonna and year(s.suorituspaivamaara=(select vuosi from #param -- täytyy olla pätevyys and kp.koodi in ('ela','eha' -- ei saa olla jo
and s.id not in (select opintosuoritus_id from #tktutk Lisätään joukkoon rivit niistä tapauksista, joissa erikoistumiskoulutus (19 -tyyppinen opiskeluoikeus on päättynyt tilastointivuoden aikana (opiskeluoikeuden tila päättynyt (3 on alkanut tilastovuonna TAI 1.1. seuraavana vuonna ja opiskeluoikeuden päättymispäivä on tilastointivuonna. SQL Expand -- erikoistumiskoulutus source insert into #tktutk ( kk,ht,sp,snimi,enimi,kansaly,aikieliy,kirtu,suorpvm,suorituspaivamaara,koulky,opiskelijaavain,opiskelija_id,opintosuoritusavain,opintosuoritus_id,opiskeluoikeusavain,opiskeluoikeus_id select kk = (select kk from #param,ht = h.henkilotunnus,sp = (select top 1 k.koodi from Sukupuoli k where k.id=h.sukupuoliid,snimi = h.sukunimi,enimi = h.etunimet,kansaly = --nb! vain suomalaiset tässä (jää null! (select top 1 m.koodi from Henkilon_maa hm inner join Maa m on m.id=hm.maaid inner join Maan_rooli mr on mr.id=hm.maan_rooliid where hm.henkiloid=h.id --sido and mr.koodi=''1'' --Kansalaisuus and m.koodi=''246'' --Suomi,aikieliy = (select top 1 case k.koodi when ''fi'' then ''1'' when ''sv'' then ''2'' else ''3'' end from Kieli k where k.id=h.kieliid,kirtu = (cast(year(p.kirjoihintulopaivamaara as varchar +(case -- 8-12 (elo-joulu: syksy when month(p.kirjoihintulopaivamaara>=8 then ''2'' -- 1-7 (tammi-heinä: kevät else ''1'' end,suorpvm = CONVERT(varchar,o.Paattymispaivamaara,112--112=yyyymmdd --,suorituspaivamaara = o.paattymispaivamaara --,koulky = ''999999'' --,p.avain opiskelijaavain,p.id opiskelija_id,null --TODO? s.avain opintosuoritusavain
,null --TODO? s.id opintosuoritus_id,o.avain opiskeluoikeusavain,o.id opiskeluoikeus_id from Henkilo h inner join Opiskelija p on p.henkiloid=h.id inner join Opiskeluoikeus o on o.opiskelijaid=p.id inner join Op_oikeuteen_liittyva_tila ot on ot.opiskeluoikeusid=o.id inner join Opiskeluoikeuden_tila ti on ti.id=ot.op_oikeuden_tilaid inner join Opiskeluoikeuden_tyyppi ty on ty.id=o.op_oikeuden_tyyppiid where 1=1 -- tila -- päättynyt and ti.koodi=''3'' -- päättynyt tilvuonna and(year(ot.alkamispaivamaara=(select vuosi from #param -- tai päivä sen jälkeen, eli 1.1.vuosi+1 or year(dateadd(day,-1,ot.alkamispaivamaara=(select vuosi from #param and year(o.paattymispaivamaara=(select vuosi from #param -- erikoistumiskoulutus and ty.koodi in (''19'' -- ei saa olla jo --miten? and s.id not in (select opintosuoritus_id from #tktutk
Yritetään hakea opiskeluoikeus-tieto vielä erikseen, jos puuttuu: SQL Expand --- source -- Opiskeluoikeustiedot --- /* om varchar(1,--opiskelumuoto kkun varchar(3,--opiskelukunta lkmmt varchar(1,--lukukausimaksukokeilu ja maksullinen tilauskoulutus opoik varchar(5,--opiskeluoikeuden alkaminen nykyisessä tutkinnossa */ -- valitaan yksi per tutkinto, jos puuttuu -- nb! luultavasti tarpeeton kysely update T set opiskeluoikeus_id=o.id, opiskeluoikeusavain=o.avain from #tktutk T inner join Opiskeluoikeus o on o.opiskelijaid=t.opiskelija_id inner join Opiskeluoikeuden_tyyppi ot on ot.id=o.op_oikeuden_tyyppiid inner join Op_oikeuteen_liittyva_tila lt on lt.opiskeluoikeusid=o.id inner join Opiskeluoikeuden_tila kt on kt.id=lt.op_oikeuden_tilaid where 1=1 -- päivitetään vain jos puuttuu (toivottavasti ei puutu! and T.opiskeluoikeus_id is null -- tutkinto-tyyppinen and ot.koodi in ('1','2','3','4','5','6','7' -- voimassa SUORpvm and T.suorituspaivamaara between o.alkamispaivamaara and coalesce(o.paattymispaivamaara,'9999-01-01' -- tila -- TO-DONE-ish: TULEE OLLA PÄÄTTYNYT -- mutta ei välttämättä vielä suorituspäivänä (+1 pv pitäisi jo olla, mutta ei katsota and kt.koodi in ('3' --päättynyt --and T.suorituspaivamaara between lt.alkamispaivamaara and coalesce(lt.paattymispaivamaara,'9999-01-01' Tietueet Yliopisto (kk Yliopiston tunnuskoodi on parametri-aputaulun luomisen yhteydessä päätelty arvo (kovakoodattu. Parametri-taulusta tieto saatiin kullekin riville jo ensimmäisissä poiminnoissa. Henkilötunnus (ht Poimitaan suoraan tietovarantoon tuotu opiskelijan henkilötunnus-tieto.
Kirjoihintulo yliopistoon (kirtu Poimitaan suoraan tietovarantoon tuotu opiskelijan kirjoilletulopäivämäärä-tieto muodossa VVVVL, jossa VVVV on vuosi ja L on lukukausi (2=syks y jos kuukausi on 8-12, 1=kevät muutoin. Opiskeluoikeuden alkaminen nykyisessä tutkinnossa (opoik Suoritettuun tutkintoon liitetyn opiskeluoikeuden alkamispäivämäärästä muodostettu tieto VVVVL, jossa VVVV on vuosi ja L on lukukausi (2=syks y jos kuukausi on 8-12, 1=kevät muutoin. SQL -- opoik update T set opoik=(cast(year(o.alkamispaivamaara as varchar +(case -- 8-12 (elo-joulu: syksy when month(o.alkamispaivamaara>=8 then '2' -- 1-7 (tammi-heinä: kevät else '1' end from #tktutk T inner join Opiskeluoikeus o on o.id=t.opiskeluoikeus_id Expand source Aineenopettajan pedagogiset opinnot (sv Päättely aineenopettajan pedagogisista opinnoista tehdään sen perusteella liittyykö valittuun opintosuoritukseen henkilön pätevyys -tieto, joka on joku seuraavista: " il" ja " ik" = Opettaja " im" = Erilliset opettajan pedagogiset opinnot Jos liittyy asetetaan '001', muuten tyhjä. Opettaja pätevyyskoodit NB! 2015-01-15: Pätevyydet pitää katsoa koko hierarkiasta!
SQL -- sv source update T set sv='001' from #tktutk T inner join Henkilon_patevyys hp on hp.opintosuoritusid=t.opintosuoritus_id inner join Patevyys p on p.id=hp.patevyysid where 1=1 and p.koodi in ('ik','il','im' --opettaja, erill opet pedag opinn and sv is null Expand -- nb! tämä tehdään opintopisteiden laskemisen jälkeen, kun temp-taulu #suoritushierarkia on olemassa -- sv (uudestaan -- NB! 2015-01-15: Pätevyydet pitää katsoa koko hierarkiasta! -- => Päivitetään SV-muuttuja vielä lopuksi, kun opintosuoritusten hierarkia on käytettävissä update T set sv='001' from #tktutk T inner join #suoritushierarkia s on s.opiskelija_id=t.opiskelija_id and s.vanhempi_id=t.opintosuoritus_id inner join Henkilon_patevyys hp on hp.opintosuoritusid=s.suoritus_id inner join Patevyys p on p.id=hp.patevyysid where 1=1 and p.koodi in ('ik','il','im' --opettaja, erill opet pedag opinn and sv is null Opiskelumuoto (om Asetuksen mukainen maisteriohjelma -tieto valitaan suoraan opiskeluoikeuden tiedoista. NB! tieto on poistumassa Opiskelumuodon muun maisteriohjelma -arvon päättely on per opiskeluoikeus: on ylempään korkeakoulututkintoon johtava (ei asetuksen mukainen ei ole lääketieteen tai hammaslääketieteen lisensiaatti tai ylempään kk-tutkintoon johtava lääketieteen alan erikoistuminen ei liity alempaan korkeakoulututkintoon johtavaa opiskeluoikeutta Erikoistumiskoulutus, ei-tutkintokoulutus 999999 Erikoistumiskoulutuksen koulutuskoodi jos on. SQL Expand -- om :: Opiskelumuoto (nb! koulk jälkeen! source -- 1=Asetuksen mukainen maisteriohjelma -- nb! poistumassa update T set om=(case when o.maisteriohjelma='1' then '1' end -- asetuksen mukainen maisteriohjelma, muutoin erillinen päättely
from #tktutk T inner join Opiskeluoikeus o on o.id=t.opiskeluoikeus_id where 1=1 -- om -- 2=Muu maisteriohjelma -- päätellään opiskeluoikeuksien liittyvyyksistä: -- * ylempi, ei asetuksen mukainen, ei liittyvää alempaa -- => maisteriohjelma (ei asetuksen mukainen update T set om='2' from #tktutk T inner join Opiskeluoikeus o on o.id=t.opiskeluoikeus_id inner join Opiskeluoikeuden_tyyppi ot on ot.id=o.op_oikeuden_tyyppiid and ot.koodi='4' --ylempi kk where 1=1 and T.om is null and o.id not in ( select ol.opiskeluoikeusid2 from Opiskeluoikeuden_liittyvyys ol inner join Opiskeluoikeus ao on ao.opiskelijaid=t.opiskelija_id and ao.id=ol.opiskeluoikeusid inner join Opiskeluoikeuden_tyyppi aot on aot.id=ao.op_oikeuden_tyyppiid and aot.koodi='2' --alempi kk -- Karsitaan lääketieteen lisensiaatit pois: and T.koulky not like '7721%' --..ja hammaslääketieteen and T.koulky not like '7722%' --..ja varmuuden vuoksi erikoistumiset (ylempi kk-tutkinto and T.koulky not like '7751%' and T.koulky not like '7752%' -- alemman kk-tutkinnon jo suorittaneet (tutkinto liitetty tähän opiskeluoikeuteen! and o.id not in ( select s.opiskeluoikeusid from Opintosuoritus s inner join Opintosuorituksen_laji kl on kl.id=s.opintosuorituksen_lajiid inner join Tutkintonimike kt on kt.id=s.tutkintonimikeid where s.opiskelijaid=t.opiskelija_id and s.opiskeluoikeusid is not null --null-arvojen palauttaminen rikkoo ilmeisesti sisäkyselyn käyttötarkoituksen? ts. null==null?!? and kl.koodi='1'--tutkinto -- alempi kk-tutkinto katsotaan koulutuskoodin ekasta numerosta! and kt.koodi like '6%' -- Erikoistumiskoulutus, ei-tutkintokoulutus 999999 UPDATE T SET T.ohjauksenAla = K.koodi, T.koulky = '999999', T.opiskeluoikeusavain = o.avain, T.opiskeluoikeus_id = o.id FROM #tktutk T INNER JOIN virta.dbo.opiskeluoikeus o ON o.id = T.opiskeluoikeus_id INNER JOIN virta.dbo.opiskeluoikeuden_tyyppi ot ON ot.id = o.op_oikeuden_tyyppiid INNER JOIN virta.dbo.koulutusala K ON K.id = O.koulutusalaid WHERE 1=1
-- erikoistumiskoulutus (siis EI tutkinto-tyyppinen AND ot.koodi in ('19' AND K.versio = 'ohjausala' -- Erikoistumiskoulutus, 999999 eikä ole tuotu ohjauksen alaa? UPDATE T SET T.koulky = '999999', T.opiskeluoikeusavain = o.avain, T.opiskeluoikeus_id = o.id FROM #tktutk T INNER JOIN virta.dbo.opiskeluoikeus o ON o.id = T.opiskeluoikeus_id INNER JOIN virta.dbo.opiskeluoikeuden_tyyppi ot ON ot.id = o.op_oikeuden_tyyppiid INNER JOIN virta.dbo.koulutusala K ON K.id = O.koulutusalaid WHERE 1=1 -- erikoistumiskoulutus (siis EI tutkinto-tyyppinen AND ot.koodi in ('19' AND K.versio <> 'ohjausala' -- Erikoistumiskoulutuksen koulutuskoodi jos on UPDATE T SET T.ekkoodi = E.koodi FROM #tktutk T INNER JOIN virta.dbo.opiskeluoikeus o ON o.id = T.opiskeluoikeus_id INNER JOIN virta.dbo.opiskeluoikeuden_tyyppi ot ON ot.id = o.op_oikeuden_tyyppiid INNER JOIN virta.dbo.koulutusala K ON K.id = O.koulutusalaid INNER JOIN virta.dbo.op_oik_liittyva_erikoistumiskoulutus OE ON OE.opiskeluoikeusid = o.id INNER JOIN virta.dbo.erikoistumiskoulutus E ON E.id = OE.erikoistumiskoulutusid WHERE 1=1 -- erikoistumisopinnot (siis EI tutkinto-tyyppinen AND ot.koodi in ('19' AND K.versio = 'ohjausala'
Tutkinnon suorituspäivämäärä (suorpvm Suoritetun tutkinnon suorituspäivämäärä muodossa VVVVKKPP. Koulutusyksikön sijaintikunta (kkun Tieto sellaisenaan tietovarannosta valituksi tulleesta opiskeluoikeudesta tilastointipäivänä voimassaolleesta opiskeluoikeusjaksosta. SQL -- kkun source update T set kkun=k.koodi from #tktutk T inner join Opiskeluoikeusjakso oj on oj.opiskeluoikeusid=t.opiskeluoikeus_id inner join Kunta k on k.id=oj.kuntaid where T.suorituspaivamaara between oj.alkamispaivamaara and coalesce(oj.paattymispaivamaara,'9999-01-01' Expand Sukupuoli (sp Poimitaan suoraan tietovarantoon tuotu opiskelijan sukupuoli-tieto. Äidinkieli (aikieliy Poimitaan suoraan tietovarantoon tuotu opiskelijan äidinkieli-tieto ja päätellään arvoksi 1=suomi, 2=ruotsi ja 3=muu. Korjataan puuttuvat arvot kategoriaan 3=muu. SQL Expand -- : aikieliy source -- nb! arvot 1,2,3, jossa 3=muu (tuntemattomat tähän / 25.9.2014 AC-kokous "TK-OKM-Virta" update T set aikieliy='3' from #tktutk T where aikieliy is null Kansalaisuus (kansaly Poimitaan suoraan tietovarantoon tuotu opiskelijan kansalaisuus-tieto. Perusjoukon keräämisen yhteydessä lisättiin suomalaiset. Päivitetään erikseen kansalaisuus vielä niille, joilta kansalaisuus puuttuu, mutta on tietovarannossa jokin muu kuin Suomi. Jos monta kansalaisuutta, valikoituu kansalaisuus "satunnaisesti".
Lopuksi korjataan vielä puuttuvat tuntemattomiksi. SQL -- kansaly -- : muut kuin suomi update T set kansaly=( select top 1 m.koodi from Henkilon_maa hm inner join Maa m on m.id=hm.maaid inner join Maan_rooli mr on mr.id=hm.maan_rooliid inner join Opiskelija p on p.henkiloid=hm.henkiloid where p.id=t.opiskelija_id --sido and mr.koodi='1' --Kansalaisuus from #tktutk T where kansaly is null -- tuntemattomia -- : kansaly update T set kansaly='999' from #tktutk T where kansaly is null Expand source Sukunimi (snimi Poimitaan suoraan tietovarantoon tuotu opiskelijan sukunimi-tieto. Etunimet (enimi Poimitaan suoraan tietovarantoon tuotu opiskelijan etunimet-tieto. Lukukausimaksukokeilu ja maksullinen tilauskoulutus (lkmmt Tieto sellaisenaan tietovarannosta tutkinnon suorituspäivänä voimassaolleesta opiskeluoikeusjaksosta rahoituslähde-tiedosta.
SQL -- lkmmt source update T set lkmmt= (case (select k.koodi from Rahoituslahde k where k.id=oj.rahoituslahdeid when '4' then '2' -- 4=Maksullinen tilauskoulutus when '5' then '1' -- 5=Lukukausimaksukokeilu else '' end from #tktutk T inner join Opiskeluoikeusjakso oj on oj.opiskeluoikeusid=t.opiskeluoikeus_id where T.suorituspaivamaara between oj.alkamispaivamaara and coalesce(oj.paattymispaivamaara,'9999-01-01' Expand Koulutuskoodi (koulky Haetaan tieto suoraan kullakin rivillä tunnetulle opintosuoritukselle (tutkinnolle. SQL -- koulky update T set koulky=k.koodi --! from #tktutk T inner join Opintosuoritus s on s.id=t.opintosuoritus_id inner join Tutkintonimike k on k.id=s.tutkintonimikeid where koulky is null -- ei ole asetettu vielä Expand source Opintopisteet TODO: Tässä kohdassa olevat päättelyt kannattaa katsoa kriittisesti läpi! TODO: Opintosuoritusten järjestävä-roolin OSUUS-tietoja ei ole vielä tarkasteltu! Oma temp-taulu, joka nopeuttaa oleellisesti kyselyitä. Viedään temp-tauluun kaikki lehtitason 'muu opintosuoritus' -lajiset opintosuoritukset, jotka liittyvät opiskelijoihin jotka poimittiin perusjoukkoon. Lehtitason opintosuoritus on suoritus johon ei sisälly muita opintosuorituksia, pl. opintosuorituksen lajien 3 ja 4 suoritukset. Kunkin opintosuorituksen luokitteluista ja järjestävä- sekä lähde-roolisista organisaatioista päätellään opintosuorituksen kategoria tiedonkeruuseen liittyen. NB! Kaikki opintopisteet lasketaan kokonaislukuna. Tämä siis siten, että opintopisteet lasketaan yhteen, jonka jälkeen saatu summa pyöristetään kokonaisluvuksi. NB! YO-sektorilla VALINTA: Mikäli yliopistolla on sisältyvyydet käytössä, jokaisen suorituksen (id yhteydessä etsitään opintosuoritusten sisältyvyyksien kautta ko. opintosuorituksen vanhempana olevia opintosuorituksia. Tätä "vanhempien ja isovanhempien ja isoiso... (jne listaa" käytetään hyväksi siinä kuuluuko suoritus perusjoukkoon valittuun tutkinto-opintosuoritukseen. Mikäli yliopistolla EI OLE sisältyvyydet käytössä (taulu Op_suor_sisaltyvyys on tyhjä, katsotaan että kullakin opintosuorituksella on tieto samasta opiskeluoikeudesta kuin tutkinto-opintosuorituksella (=sama malli kuin on AMK-sektorilla käytössä. NB! YO-sektorilla: Jatkotutkinnoille ei lasketa ja merkitä opintopisteitä. Tämä tarkistetaan siten, että mikäli suoritetun tutkinnon koulutuskoodi alkaa merkillä "8" tai merkeillä "775", tulkitaan tutkinto jatkotutkinnoksi, ja opintopisteitä ei
merkitä. Seuraavat opintopistetiedot täytetään tässä "yhdessä nipussa": Omassa yliopistossa suoritetut opintopisteet (pl. avoin yliopisto-opetus (opoylio Mikäli suoritusta ei luokitella muihin kategorioihin, tulee suorituksen opintopisteet tähän kategoriaan. Eli tämä on ns. oletuskategoria. Avoimessa yliopisto-opetuksessa suoritetut opintopisteet (sekä omat että muu yliopisto (opaylio Mikäli opintosuorituksen luokittelu sisältää arvon 1="avoimessa", lasketaan opintopisteet tähän kategoriaan. Riippumatta organisaatio-tiedoista! Muissa yliopistoissa suoritetut opintopisteet (pl. avoin yliopisto (opmylio Mikäli suorituksen järjestävä-roolisista (tai hyväksiluetun opintosuorituksen tapauksessa lähde-roolin organisaatioista löytyy oppilaitostyypiltään 42='Yliopistot' tai 43='Sotilaskorkeakoulut' oleva organisaatio, joka ei ole sama kuin kenen tietoja nyt käsitellään, lasketaan opintopisteet tähän kategoriaan. Kategoriaan "avoimessa suoritettu" ei saa olla asetettu, eli opintosuorituksella ei saa olla opintosuorituksen luokittelua 1="avoimessa". Ammattikorkeakouluissa suoritetut opintopisteet (opamk Mikäli suorituksen järjestävä-roolisista (tai hyväksiluetun opintosuorituksen tapauksessa lähde-roolin organisaatioista löytyy oppilaitostyypiltään 41='Ammattikorkeakoulut' oleva organisaatio, joka ei ole sama kuin kenen tietoja nyt käsitellään, lasketaan opintopisteet tähän kategoriaan. Kategoriaan "avoimessa suoritettu" ei saa olla asetettu, eli opintosuorituksella ei saa olla opintosuorituksen luokittelua 1="avoimessa". Ulkomailla suoritetut opintopisteet (opulk Mikäli suorituksen järjestävä-roolisista (tai hyväksiluetun opintosuorituksen tapauksessa lähde-roolin organisaatioista löytyy organisaatio UK='Ulkomainen korkeakoulu' tai UM='Ulkomainen muu oppilaitos', joka ei ole sama kuin kenen tietoja nyt käsitellään, lasketaan opintopisteet tähän kategoriaan. Kategoriaan "avoimessa suoritettu" ei saa olla asetettu, eli opintosuorituksella ei saa olla opintosuorituksen luokittelua 1="avoimessa". Muualla suoritetut opintopisteet (opmuu Mikäli suorituksen järjestävä-roolisista (tai hyväksiluetun opintosuorituksen tapauksessa lähde-roolin organisaatioista löytyy organisaatio joka ei ole tyypiltään 41='Ammattikorkeakoulu', 42='Yliopisto' tai 43='Sotilaskorkeakoulut', tai organisaatio itsessään on 63='Kansanopistot', 64='Kansalaisopistot', 66='Kesäyliopistot', 99='Muut oppilaitokset', Muu='Pienet oppilaitokset ja koulutuksenjärjestäjät (alle 5 opiskelijaa' tai XX='Muodollisen koulutuksen ulkopuolella', ja organisaatio ei ole sama kuin minkä tahansa korkeakoulun tiedot tietovarannossa (varmuuden vuoksi tarkistus ja organisaatio itsessään ei ole 41='Ammattikorkeakoulut', 42='Yliopistot', 43='Sotilaskorkeakoulut', UK='Ulkomainen korkeakoulu' tai UM='Ulkomainen muu oppilaitos', ja organisaatio ei ole sama kuin kenen tietoja nyt käsitellään lasketaan opintopisteet tähän kategoriaan. Kategoriaan "avoimessa suoritettu" ei saa olla asetettu, eli opintosuorituksella ei saa olla opintosuorituksen luokittelua 1="avoimessa". Opintopisteet yhteensä (opyht Opintopisteet yhteensä on kaikkien tutkinto-opintosuoritukseen sisältyvien (aputaulussa olevien lehtitaso opintosuoritusten laajuuksien summa. Tutkinnon opintopisteet ( Tämä tieto on uusi (12.1.2015 ja tullut mukaan korvaamaan "opintopisteet yhteensä" -tietoa. Tieto on suoraan tutkinto-opintosuoritukselle (laji=1 eli tiedonkeruun perusjoukon rivin tieto tallennettu laajuus-tieto. Tästä tiedosta lasketaan "omassa yliopistossa suoritetut opintopisteet". --- SQL
-- Opinnot, suoritukset, opintopisteet --- Expand -- source -- "opintopistekysymykset eivät koske jatkotutkintoja opiskelevia, joille opintopistetietoja ei merkitä" -- Opintopisteitä varten tehdä oma erillinen aputaulu -- Temp-taulu tietojen valintaa varten -- NB! param-taulussa saa olla vain yksi rivi! IF OBJECT_ID('tempdb..#pisteet' IS NOT NULL BEGIN truncate table #pisteet drop table #pisteet if @debug<>0 print convert(varchar,getdate(,120+' DROP temp-taulu pisteet' END create table #pisteet ( opiskelija_id int not null, opiskeluoikeus_id int, opintosuoritus_id int not null, laajuus decimal(18,6 not null, suoritus_pvm date not null, hyvaksiluettu_pvm date, oylio bit, aylio bit, mylio bit, amk bit, ulk bit, muu bit if @debug<>0 print convert(varchar,getdate(,120+' CREATE temp-taulu pisteet' -- TODO: OSUUDET insert into #pisteet (opiskelija_id,opiskeluoikeus_id,opintosuoritus_id,laajuus,suoritus_pvm,hyvaksiluettu_ pvm,oylio,aylio,mylio,amk,ulk,muu select s.opiskelijaid as opiskelija_id, s.opiskeluoikeusid as opiskeluoikeus_id, s.id as opintosuoritus_id, s.laajuus as laajuus, s.suorituspaivamaara as suoritus_pvm, shl.hyvaksilukupaivamaara as hyvaksiluettu_pvm -- opintopisteiden jaottelu -- oma ylio: käytetään halpaa logiikkaa, eli yhteensä miinus muut. tässä null kunnes..!, null as oylio --avoin ylio,coalesce((select distinct 1 from Op_suor_liittyva_luokittelu ll inner join Op_suor_luokittelu k on k.id=ll.opintosuorituksen_luokitteluid where ll.opintosuoritusid=s.id and k.koodi='1' -- avoimessa,0 as aylio --muu ylio,coalesce((select distinct 1 from Op_suorituksen_organisaatio sg inner join Organisaatio g on g.id=sg.organisaatioid inner join Organisaation_rooli gr on gr.id=sg.organisaation_rooliid where sg.opintosuoritusid=s.id and(gr.koodi='2' -- järjestävä
or(gr.koodi='3' and shl.hyvaksilukupaivamaara is not null --hyväksiluettu and(g.koodi in ( SELECT Organisaatio_koodi FROM Yhteiset.Koodistot.Organisaatio_Oppilaitostyyppi WHERE Oppilaitostyyppi_koodi='42' or Oppilaitostyyppi_koodi='43' or g.koodi='42' or g.koodi='43' -- ei oma yliopisto and g.koodi <> (select OrganisaatioKoodi from Yhteiset.Asetukset.Instanssit where DB=(select org from #param -- varmuuden vuoksi/yhteentoimivuus and g.koodi <> (select kk from #param,0 as mylio --amk,coalesce((select distinct 1 from Op_suorituksen_organisaatio sg inner join Organisaatio g on g.id=sg.organisaatioid inner join Organisaation_rooli gr on gr.id=sg.organisaation_rooliid where sg.opintosuoritusid=s.id and(gr.koodi='2' -- järjestävä or(gr.koodi='3' and shl.hyvaksilukupaivamaara is not null --hyväksiluettu and(g.koodi in (SELECT Organisaatio_koodi FROM Yhteiset.Koodistot.Organisaatio_Oppilaitostyyppi WHERE Oppilaitostyyppi_koodi='41' or g.koodi='41' -- ei oma yliopisto and g.koodi <> (select OrganisaatioKoodi from Yhteiset.Asetukset.Instanssit where DB=(select org from #param -- varmuuden vuoksi/yhteentoimivuus and g.koodi <> (select kk from #param,0 as amk --ulk,coalesce((select distinct 1 from Op_suorituksen_organisaatio sg inner join Organisaatio g on g.id=sg.organisaatioid inner join Organisaation_rooli gr on gr.id=sg.organisaation_rooliid where sg.opintosuoritusid=s.id and(gr.koodi='2' -- järjestävä or(gr.koodi='3' and shl.hyvaksilukupaivamaara is not null --hyväksiluettu --ei tarvita: and g.koodi not in (SELECT Organisaatio_koodi FROM Yhteiset.Koodistot.Organisaatio_Oppilaitostyyppi and g.koodi in ('UK','UM' -- ei oma yliopisto and g.koodi <> (select OrganisaatioKoodi from Yhteiset.Asetukset.Instanssit where DB=(select org from #param -- varmuuden vuoksi/yhteentoimivuus and g.koodi <> (select kk from #param,0 as ulk --muu,coalesce((select distinct 1 from Op_suorituksen_organisaatio sg inner join Organisaatio g on g.id=sg.organisaatioid inner join Organisaation_rooli gr on gr.id=sg.organisaation_rooliid where sg.opintosuoritusid=s.id and(gr.koodi='2' -- järjestävä or(gr.koodi='3' and shl.hyvaksilukupaivamaara is not null --hyväksiluettu
-- XX yksin ei riitä --and g.koodi in ('XX' --DONE-ish? opplaittyyp tarkistus! and(g.koodi in ( SELECT Organisaatio_koodi FROM Yhteiset.Koodistot.Organisaatio_Oppilaitostyyppi WHERE Oppilaitostyyppi_koodi is not null and Oppilaitostyyppi_koodi not in ('41','42','43' or g.koodi in ('63','64','66','99','Muu','XX' -- leikataan nämä pois and g.koodi not in (select Asetus from Yhteiset.Asetukset.Ohjaus_Parametrit p where p.toiminto='oppilaitostyyppi' and g.koodi not in ('41','42','43','UK','UM' -- ei oma yliopisto and g.koodi <> (select OrganisaatioKoodi from Yhteiset.Asetukset.Instanssit where DB=(select org from #param -- varmuuden vuoksi/yhteentoimivuus and g.koodi <> (select kk from #param,0 as muu from Opintosuoritus s inner join Opintosuorituksen_laji sl on sl.id=s.opintosuorituksen_lajiid -- HYVÄKSILUETTU left join Opsuorituksen_hyvaksiluku shl on shl.opintosuoritusid=s.id cross join #param -- saa olla vain yksi rivi! where 1=1 --muu opintosuoritus and sl.koodi='2' -- lehtitaso, tai ei ainakaan vanhempi (lajeja 3 ja 4 ei huomioida and s.id not in ( select ss.opintosuoritusid from Op_suor_sisaltyvyys ss -- 2015-01-19: lajeja 3 ja 4 ei huomioida where ss.opintosuoritusid not in ( select sss.id from Opintosuoritus sss inner join Opintosuorituksen_laji sssl on sssl.id=sss.opintosuorituksen_lajiid where sssl.koodi in ('3','4' -- mukaan vain tutkinnon suorittaneiden pisteet! and s.opiskelijaid in (select T.opiskelija_id from #tktutk T CREATE NONCLUSTERED INDEX IX_pisteet_opiskelija_id ON #pisteet (opiskelija_id INCLUDE (opiskeluoikeus_id,opintosuoritus_id,laajuus,suoritus_pvm CREATE NONCLUSTERED INDEX IX_pisteet_suoritus_pvm ON #pisteet (suoritus_pvm INCLUDE (opiskelija_id,opiskeluoikeus_id,laajuus CREATE NONCLUSTERED INDEX IX_pisteet_hyvaksiluettu_pvm ON #pisteet (hyvaksiluettu_pvm INCLUDE (opiskelija_id,opiskeluoikeus_id,laajuus,suoritus_pvm --select * from #pisteet -- suoritusten hierarkia-aputaulu -- tehdään hierarkiasta kaksitasoinen -- sisältyvyys-hierarkia: -- TUTK -- KOK
-- LEHTI -- => tauluksi jossa lehtitason suoritus linkitetään kaikkiin sen vanhempiin: -- LEHTI KOK -- LEHTI TUTK --/* IF OBJECT_ID('tempdb..#suoritushierarkia' IS NOT NULL BEGIN truncate table #suoritushierarkia drop table #suoritushierarkia -- if @debug<>0 print convert(varchar,getdate(,120+' DROP temp-taulu pisteet' END create table #suoritushierarkia ( opiskelija_id int not null, suoritus_id int not null, vanhempi_id int not null -- rekursiivisella CTE (common table expression kyselyllä -- * vahdittava että toimii sillä on virheherkkä! -- löytää kyllä silmukoita (jättää ulos tuloksesta, mutta esimerkiksi -- linkki itseensä joissakin tilanteissa on tälle kyselylle liikaa. -- => linkit itseensä on erikseen katsottu kyselyssä pois! WITH dcba --lehdestä alkaen! AS ( -- anchor SELECT OpintosuoritusID2 as id, OpintosuoritusID2 as lapsi, OpintosuoritusID2 as lehti FROM Op_suor_sisaltyvyys WHERE OpintosuoritusID2 NOT in ( -- lehtitaso, tai ei ainakaan vanhempi (lajeja 3 ja 4 ei huomioida select ss.opintosuoritusid from Op_suor_sisaltyvyys ss -- 2015-01-19: lajeja 3 ja 4 ei huomioida where ss.opintosuoritusid not in ( select sss.id from Opintosuoritus sss inner join Opintosuorituksen_laji sssl on sssl.id=sss.opintosuorituksen_lajiid where sssl.koodi in ('3','4' -- voi olla monta kertaa, joten: group by OpintosuoritusID2 UNION ALL -- recursive member SELECT r.opintosuoritusid as id, r.opintosuoritusid2 as lapsi, a.lehti FROM Op_suor_sisaltyvyys AS r INNER JOIN dcba AS a ON r.opintosuoritusid2 = a.id WHERE r.opintosuoritusid<>r.opintosuoritusid2 -- estetään linkit itseensä! INSERT INTO #suoritushierarkia (opiskelija_id,suoritus_id,vanhempi_id SELECT DISTINCT s.opiskelijaid,dcba.lehti,s.id FROM Opintosuoritus s left join dcba on dcba.id=s.id WHERE 1=1 and dcba.lehti is not null -- mukaan vain tutkinnon suorittaneiden pisteet! and s.opiskelijaid in (select T.opiskelija_id from #tktutk T -- rekursion määrä (0 sallisi kaiken, eli hierarkian maksimisyvyys option (maxrecursion 20
CREATE NONCLUSTERED INDEX IX_suoritushierarkia_opiskelija_id ON #suoritushierarkia (opiskelija_id INCLUDE (suoritus_id,vanhempi_id CREATE NONCLUSTERED INDEX IX_suoritushierarkia_suoritus_id ON #suoritushierarkia (suoritus_id INCLUDE (opiskelija_id,vanhempi_id CREATE NONCLUSTERED INDEX IX_suoritushierarkia_vanhempi_id ON #suoritushierarkia (vanhempi_id INCLUDE (opiskelija_id,suoritus_id --- -- Opinnot, suoritukset, opintopisteet --- -- EI KOSKE JATKOTUTKINTOJA (koulk: 8%,775% -- -- VIRTA-625: Lisätään tutkinto-opintosuorituksen opintopisteet mukaan tiedonkeruuseen. -- NB! "omassa yliopistossa suoritetut opintopisteet" on nyt tutkinto-opintosuorituksen -- opintopisteet miinus muiden kategorioiden mukaisesti suoritetut opintopisteet update T set optutk = cast(cast(round(s.laajuus,0 as int as varchar from #tktutk T inner join Opintosuoritus s on s.id=t.opintosuoritus_id where T.optutk is null -- ei jatkotutkintoja: AND T.koulky NOT LIKE '8%' --lisensiaatit, tohtorit AND T.koulky NOT LIKE '775%' --erikois[*]lääkärit -- Minkä perusteella katsotaan kuuluuko suoritus mukaan laskettaviin? -- - sisältyvyydet (hierarkia -- VAI -- - opiskeluoikeus-kytkös -- SISÄLTYVYYS (HIERARKIA IF (0 < (SELECT TOP 1 COUNT(* FROM Op_suor_sisaltyvyys BEGIN -- kategoriat ja yhteensä (summa lehtitasolta update T set --opoylio :: oma yliopisto erikseen. ks. alla! opaylio=( select cast(cast(round(sum( -- sekä oman yo:n että muut case when s.aylio = 1 then s.laajuus else 0 end,0 as int as varchar from #pisteet s where s.opiskelija_id=t.opiskelija_id and s.opintosuoritus_id in (select suoritus_id from #suoritushierarkia where opiskelija_id=t.opiskelija_id and vanhempi_id=t.opintosuoritus_id group by s.opiskelija_id, opmylio=( select cast(cast(round(sum( -- muu yo (nb! pl. avoin
case when s.mylio = 1 and s.aylio=0 then s.laajuus else 0 end,0 as int as varchar from #pisteet s where s.opiskelija_id=t.opiskelija_id and s.opintosuoritus_id in (select suoritus_id from #suoritushierarkia where opiskelija_id=t.opiskelija_id and vanhempi_id=t.opintosuoritus_id group by s.opiskelija_id, opamk=( select cast(cast(round(sum( -- nb! pl. avoin oma lisäys! case when s.amk = 1 and s.aylio=0 then s.laajuus else 0 end,0 as int as varchar from #pisteet s where s.opiskelija_id=t.opiskelija_id and s.opintosuoritus_id in (select suoritus_id from #suoritushierarkia where opiskelija_id=t.opiskelija_id and vanhempi_id=t.opintosuoritus_id group by s.opiskelija_id, opulk=( select cast(cast(round(sum( -- nb! pl. avoin oma lisäys! case when s.ulk = 1 and s.aylio=0 then s.laajuus else 0 end,0 as int as varchar from #pisteet s where s.opiskelija_id=t.opiskelija_id and s.opintosuoritus_id in (select suoritus_id from #suoritushierarkia where opiskelija_id=t.opiskelija_id and vanhempi_id=t.opintosuoritus_id group by s.opiskelija_id, opmuu=( select cast(cast(round(sum( -- nb! pl. avoin oma lisäys! case when s.muu = 1 and s.aylio=0 then s.laajuus else 0 end,0 as int as varchar from #pisteet s where s.opiskelija_id=t.opiskelija_id and s.opintosuoritus_id in (select suoritus_id from #suoritushierarkia where opiskelija_id=t.opiskelija_id and vanhempi_id=t.opintosuoritus_id group by s.opiskelija_id, opyht=( select cast(cast(round(sum( s.laajuus,0 as int as varchar from #pisteet s where s.opiskelija_id=t.opiskelija_id and s.opintosuoritus_id in (select suoritus_id from #suoritushierarkia where opiskelija_id=t.opiskelija_id and vanhempi_id=t.opintosuoritus_id group by s.opiskelija_id from #tktutk T where T.opyht is null -- ei jatkotutkintoja: AND T.koulky NOT LIKE '8%' --lisensiaatit, tohtorit AND T.koulky NOT LIKE '775%' --erikois[*]lääkärit -- OPISKELUOIKEUS-KYTKÖS
END ELSE BEGIN -- kategoriat ja yhteensä (summa lehtitasolta update T set --opoylio :: oma yliopisto erikseen. ks. alla! opaylio=( select cast(cast(round(sum( -- sekä oman yo:n että muut case when s.aylio = 1 then s.laajuus else 0 end,0 as int as varchar from #pisteet s where s.opiskelija_id=t.opiskelija_id and s.opiskeluoikeus_id=t.opiskeluoikeus_id group by s.opiskelija_id, opmylio=( select cast(cast(round(sum( -- muu yo (nb! pl. avoin case when s.mylio = 1 and s.aylio=0 then s.laajuus else 0 end,0 as int as varchar from #pisteet s where s.opiskelija_id=t.opiskelija_id and s.opiskeluoikeus_id=t.opiskeluoikeus_id group by s.opiskelija_id, opamk=( select cast(cast(round(sum( -- nb! pl. avoin oma lisäys! case when s.amk = 1 and s.aylio=0 then s.laajuus else 0 end,0 as int as varchar from #pisteet s where s.opiskelija_id=t.opiskelija_id and s.opiskeluoikeus_id=t.opiskeluoikeus_id group by s.opiskelija_id, opulk=( select cast(cast(round(sum( -- nb! pl. avoin oma lisäys! case when s.ulk = 1 and s.aylio=0 then s.laajuus else 0 end,0 as int as varchar from #pisteet s where s.opiskelija_id=t.opiskelija_id and s.opiskeluoikeus_id=t.opiskeluoikeus_id group by s.opiskelija_id, opmuu=( select cast(cast(round(sum( -- nb! pl. avoin oma lisäys! case when s.muu = 1 and s.aylio=0 then s.laajuus else 0 end,0 as int as varchar from #pisteet s where s.opiskelija_id=t.opiskelija_id and s.opiskeluoikeus_id=t.opiskeluoikeus_id group by s.opiskelija_id, opyht=( select cast(cast(round(sum( s.laajuus,0 as int as varchar from #pisteet s where s.opiskelija_id=t.opiskelija_id and s.opiskeluoikeus_id=t.opiskeluoikeus_id group by s.opiskelija_id
from #tktutk T where T.opyht is null -- ei jatkotutkintoja: AND T.koulky NOT LIKE '8%' --lisensiaatit, tohtorit AND T.koulky NOT LIKE '775%' --erikois[*]lääkärit END -- hierarkia vs opiskeluoikeus-kytkös -- oma yliopisto: = "yhteensä - muut kategoriat" -- VIRTA-625: oma yliopisto = tutkinnon opintopisteet - muut kategoriat update T set opoylio = cast( --cast(coalesce(opyht,0 as int cast(coalesce(optutk,0 as int - ( cast(coalesce(opaylio,0 as int + cast(coalesce(opmylio,0 as int + cast(coalesce(opamk,0 as int + cast(coalesce(opulk,0 as int + cast(coalesce(opmuu,0 as int as varchar from #tktutk T where 1=1 -- ei jatkotutkintoja: AND T.koulky NOT LIKE '8%' --lisensiaatit, tohtorit AND T.koulky NOT LIKE '775%' --erikois[*]lääkärit Tulos
SQL Expand --- -- TULOS source --- -- CSV-sarakkeet select ISNULL(kk,'' as "Yliopisto" --(kk,isnull(ht,'' "Henkilötunnus" --(ht,isnull(kirtu,'' "Kirjoihintulo yliopistoon" --(kirtu,isnull(opoik,'' "Opiskeluoikeuden alkaminen nykyisessä tutkinnossa" --(opoik,isnull(sv,'' "Aineenopettajan pedagogiset opinnot" --(sv,isnull(om,'' "Opiskelumuoto" --(om,isnull(suorpvm,'' "Tutkinnon suorituspäivämäärä" --(suorpvm,isnull(kkun,'' "Koulutusyksikön sijaintikunta" --(kkun,isnull(sp,'' "Sukupuoli" --(sp,isnull(aikieliy,'' "Äidinkieli" --(aikieliy,isnull(kansaly,'' "Kansalaisuus" --(kansaly,isnull(snimi,'' "Sukunimi" --(snimi,isnull(enimi,'' "Etunimet" --(enimi,isnull(opoylio,'' "Omassa yliopistossa suoritetut opintopisteet (pl. avoin yliopisto-opetus" --(opoylio,isnull(opaylio,'' "Avoimessa yliopisto-opetuksessa suoritetut opintopisteet (sekä omat että muu yliopisto" --(opaylio,isnull(opmylio,'' "Muissa yliopistoissa suoritetut opintopisteet (pl. avoin yliopisto" --(opmylio,isnull(opamk,'' "Ammattikorkeakouluissa suoritetut opintopisteet" --(opamk,isnull(opulk,'' "Ulkomailla suoritetut opintopisteet" --(opulk,isnull(opmuu,'' "Muualla suoritetut opintopisteet" --(opmuu,isnull(opyht,'' "Opintopisteet yhteensä" --(opyht,isnull(lkmmt,'' "Lukukausimaksukokeilu ja maksullinen tilauskoulutus" --(lkmmt,isnull(koulky,'' "Koulutuskoodi" --(koulky -- VIRTA-625: tutkinto-opintosuorituksen opintopisteet,isnull(optutk,'' "Tutkinnon opintopisteet" --( -- korkeakoulujen pyynnöstä, lisäkentät,t.opiskelijaavain "Opiskelija-avain",T.opiskeluoikeusavain "Opiskeluoikeusavain",T.opintosuoritusavain "Opintosuoritusavain" from #tktutk T where T.opintosuoritus_id is not null order by ht,suorpvm,koulky Tarkistus Suoritetaan tarkistuksia poimittuihin tietoihin liittyen. Pohjaksi on otettu Tilastokeskuksen aiemmin tekemän tarkistusohjelman kuvaus. NB! Tarkistuksia tulee jalostaa vielä. Nyt on kuitenkin jotakin pohjaa. Lisäksi tarkistuksia haluttaneen lisää. Dokumentointia ei vielä ole yritettykään tehdä kattavaksi, sillä niin paljon tarkennusta vaativia kohtia on nyt. SQL --- -- TARKISTUS --- --!!!!!!!! KOPIOITU AMK-SEKTORILTA!!!!!!!-- Expand source
/* Tilastokeskuksen tarkistusohjelman suorittamat tarkistukset Kun amk-tutkintotiedonkeruun aineisto on toimitettu TK:n palvelimelle, virheentarkistusohjelma tarkistaa seuraavat asiat. Kunkin virhetyypin yhteydessä on mainittu sen nimike palautetulosteessa. TUNN = tunn (oppilaitostunnus on virheellinen onko oppilaitostunnus jokin voimassaolevista 5-numeroisista tunnuksista AVAIN = oltunn - tutk - ko - sv (tutkintokoodi - koulutusohjelma - suuntautumisvaihtoehto -koodikombinaatio on virheellinen avaimen (oppilaitos-tutkinto-ko-sv perusteella verrataan opetushallinnon koulutusohjelmapäätöksiin AVAIN2 = oltunn - tutk - ko - sv - koulk (tutkintokoodi - koulutusohjelma - suuntautumisvaihtoehto - koulutuskoodi -koodikombinaatio on virheellinen Jos koulutuskoodi on merkitty, niin avaimen (oppilaitos-tutkinto-ko-sv-koulutuskoodi perusteella verrataan opetushallinnon koulutusohjelmapäätöksiin, jotka on kooditettu Tilastokeskuksen koulutuskoodilla TUTK = tutkinto virheellinen verrataan tutkintokoodia koulutusohjelmapäätöksissä oleviin mahdollisiin tutkintokoodeihin KO = koulutusohjelma virheellinen verrataan ko-koodia koulutusohjelmapäätöksissä oleviin mahdollisiin ko-koodeihin SV = suuntautumisvaihtoehto virheellinen verrataan sv-koodia koulutusohjelmapäätöksissä oleviin mahdollisiin sv-koodeihin KOULTYP = koulutustyyppi on virheellinen KOULTYP1 = muuttujan arvo ei ole 1, 2, 3, 5 eikä 6 KOULTYP2 = erikoistumisopinnoissa ja opettajankoulutuksessa koodi on joko 3 tai 5, muuten 1, 2 tai 6 KOULTYP3= koulutusohjelma ei sallittu erikoistumisopinnoissa tai opettajankoulutuksessa SRHTUP = ilmoitus sairaanhoitajista, joilla myös kätilön, ensihoitajan tai terveydenhoitajan tutkinto (tuplasairaanhoitajat KKIELI = kkieli (koulutuksen opetuskieli -koodiarvo on virheellinen koulutusohjelman opetuskieli löytyy opm:n päätöksistä (jos koulutusohjelmaa ei löydy, virhettä ei enää erikseen listata tässä kohdassa. KKUN = kkun (koulutuksen sijaintikunta -koodiarvo on virheellinen Verrataan toimilupapäätöksiin, onko amk:lla lupa järjestää koulutusta kyseisessä kunnassa.ammattikorkeakoulun koulutustehtävässä määrättävä sijaintipaikka koskee ammattikorkeakoulututkintoon johtavaa nuorten koulutuksena järjestettävää koulutusta ja ylempään ammattikorkeakoulututkintoon johtavaa koulutusta. KKUN2 = kkun2 (kunta -koodiarvo on virheellinen Verrataan voimassa olevaan kuntaluokitukseen ( koulutustyyppi 2, 3 ja 5. HT = henkilötunnus (tai sukupuoli on virheellinen tai puutteellinen HT1 = Puutteelliset henkilötunnukset - loppuosa puuttuu HT2 = henkilötunnukset, joiden jakojäännös ei täsmää - loppuosa virheellinen HT3 = sukupuolitieto virheellinen AIKIELI = äidinkielitieto virheellinen verrataan äidinkieltä sallittujen kielten listaan ASKUN = asuinkuntatieto virheellinen verrataan kuntatietoa sallittujen kuntien listaan KANSAL = kansalaisuustieto virheellinen verrataan kansallisuustietoa sallittujen kansallisuuksien listaan KIRTUPV = kirjoihintuloajankohta on virheellinen KIRTUPV1 = tarkistetaan, onko koulutusohjelmapäätös ollut voimassa silloin kun opiskelija on aloittanut opintonsa kyseisessä tutkinnossa missä tahansa amk:ssa. (jos koulutusohjelmaa ei löydy, virhettä ei enää erikseen listata tässä kohdassa. KIRTUPV2 = kirjoihintulovuosi ei saa olla suurempi kuin tilastovuosi, kirjoihintulokuukausi saa arvon 1-12, päivä arvon 1-31 SUORAIK = tutkinnon suoritusajankohta on virheellinen
tutkinnon suoritusvuoden täytyy olla sama kuin tilastovuosi, suorituskuukausi saa arvon 1-12, päivä arvon 1-31 TU = sama tutkinto on aineistossa kahteen kertaan TU1 = tarkistetaan onko joillakin havainnoilla samat arvot joka muuttujalla - täydellinen tuplatietue TU2 = tarkistetaan onko joillakin havainnoilla samat oppilaitostunnus-tutkinto-ko-sv -kombinaatiot eli henkilöllä täsmälleen sama tutkinto aineistossa kahteen kertaan OP = suoritetuissa opintopisteissä tarkistettavaa (voi olla 0-300 OP1 = omassa ammattikorkeakoulussa suoritetut opintopisteet OP2 = muissa ammattikorkeakouluissa suoritetut opintopisteet OP3 = yliopistoissa suoritetut opintopisteet OP4 = yleissivistävissä ja ammatillisissa oppilaitoksissa suoritetut opintopisteet OP5 = ulkomailla suoritetut opintopisteet OP6 = muualla suoritetut opintopisteet OP7 = opintopisteet yhteensä LASNALK = läsnä- ja poissaololukukausissa virhe läsnä- ja poissaololukukausien yhteenlaskettua määrää verrataan ensimmäisen kirjoihintulon ja tutkinnonsuoritusajankohdan perusteella laskettuihin käytettyihin kausiin. OPLAAJ = opintojen laajuus virheellinen OPLAAJ1=muodollinen virhe (voi olla 1-300 OPLAAJ2 = ei voi olla enemmän kuin opm:n päätöksessä määrätty tutkinnon pituus. KIRTU1PV = Ensimmäinen kirjoihintuloajankohta ko. tutkintoon virheellinen KIRTU1PV = kirjoihintulokuukausi voi saada arvon 1-12, päivä arvon 1-31 KIRTU1P2 = ei voi olla suurempi kuin kirjoihintulo tähän tutkintoon tässä amk:ssa eikä suurempi kuin tilastovuosi OPETTAJA = Lastentarhanpettajan koulutus muodoltaan virheellinen OPETT1 = voi olla 1, 2, tai tyhjä. OPETT2 = opettajankoulutus ei ole sosionomi-tutkinnolla RAHLAHDE = Rahoituslähde muodoltaan virheellinen RAHLAHDE=voi olla joko 1, 2, 3, 4 tai 5 RAHLAHD4= rahoituslähde on 4 ja maksullisen tilauskoulutuksen sijaintimaatieto puuttuu TILMAA = Maksullisen tilauskoulutuksen sijaintimaatieto virheellinen Verrataan sijaintimaatietoa sallittujen maiden listaan */ --/* IF OBJECT_ID('tempdb..#tarkistus' IS NOT NULL BEGIN truncate table #tarkistus drop table #tarkistus print convert(varchar,getdate(,120+' DROP temp-taulu' END create table #tarkistus ( tunn varchar(5, --koultyp1 varchar(1, --koultyp2 varchar(8, --koultyp3 varchar(8, srhtup varchar(15, kkieli varchar(2, kkun2 varchar(3, ht1 varchar(11, ht2 varchar(11, ht3 varchar(11, aikieli varchar(2, askun varchar(3, kansal varchar(3, kirtupv2 varchar(8, suoraik varchar(8,
tu1 varchar(1, tu2 varchar(1, op1 varchar(4, op2 varchar(4, op3 varchar(4, op4 varchar(4, op5 varchar(4, op6 varchar(4, op7 varchar(4, --lasnalk varchar(10, --oplaaj1 varchar(4, --kirtu1pv varchar(8, --kirtu1p2 varchar(8, --opett1 varchar(2, --opett2 varchar(8, --rahlahde varchar(1, -- opiskelijaavain varchar(100, opintosuoritusavain varchar(100, opiskeluoikeusavain varchar(100, opiskelija_id int, opintosuoritus_id int, opiskeluoikeus_id int, db varchar(8, print convert(varchar,getdate(,120+' CREATE temp-taulu #tarkistus' insert into #tarkistus select tunn = ''--(case when kk not in (select koodi from virta..organisaatio then kk else '' end --,koultyp1 = (case when koultyp not in ('1','2','3','5','6' then koultyp else '' end --,koultyp2 = (case -- when koultyp in ('3','5' and len(koulk=6 and koulk<>'999999' then koultyp+' '+koulk -- when koultyp in ('1','2','6' and koulk='999999' then koultyp+' '+koulk -- else '' end --,koultyp3 = (case -- when koultyp in ('1','2','6' and koulk='999999' then koultyp+' '+koulk -- else '' end,srhtup = (case when koulky='671101' then --sairaanhoitaja (amk case when exists ( select 1 from #tktutk t2 where t2.opiskelijaavain=#tktutk.opiskelijaavain and koulky in ('671106','671116','671103' --kätilö (amk, ensihoitaja (amk, terveydenhoitaja (amk then '1' else '' end when koulky='771201' then --sairaanhoitaja (ylempi amk case when exists ( select 1 from #tktutk t2 where t2.opiskelijaavain=#tktutk.opiskelijaavain and koulky in ('771206','771216','771203' --kätilö (ylempi amk, ensihoitaja (ylempi amk, terveydenhoitaja (ylempi amk then '1' else '' end else '' end,kkieli = ''--(case when kiel not in ('fi','sv','en','de' then kiel else '' end --,kkun = --toimilupapäätökset?,kkun2 = (case --when koultyp in ('2','3','5' --miksi?