55 op laskennan poimintakuvaus

Samankaltaiset tiedostot
Opiskeluoikeuksien maaran tiedonkeruu

Opintojen edistymisen seurannan aikataulu, syksy 2016 ja kevät 2017

Virta_Latausraportti - Tarkistukset

Tilastokeskuksen opiskelijatiedonkeruu yliopistot

Tilastokeskuksen opiskelijatiedonkeruu ammattikorkeakoulut

Tilastokeskuksen tutkintotiedonkeruu ammattikorkeakoulut

Tilastokeskuksen tutkintotiedonkeruu ammattikorkeakoulut

Tilastokeskuksen tutkintotiedonkeruu yliopistot

Opintopistetiedonkeruu

Kirjasto Relaatiotietokannat Kevät Auvinen Annemari Niemi Anu Passoja Jonna Pulli Jari Tersa Tiina

Nykyiset tiedonkeruut tietovarannosta

SQL-perusteet, SELECT-, INSERT-, CREATE-lauseet

SQL - STRUCTURED QUERY LANGUAGE

Samanaikaisuuden hallinta. Optiot transaktionaalisissa työnkuluissa

HAAGA-HELIA Heti-09 1 (12) ICT05 Tiedonhallinta ja Tietokannat O.Virkki Näkymät

KOTA-seminaari, Helsinki 2018 VIRTA-OTP Tiedonkeruut Tavoiteajassa tutkinnon suorittaneet

HELIA 1 (14) Outi Virkki Tiedonhallinta

TIEDONHALLINTA - SYKSY Luento 11. Hannu Markkanen /10/12 Helsinki Metropolia University of Applied Sciences

Insert lauseella on kaksi muotoa: insert into taulu [(sarakenimet)] values (arvot)

Tällä viikolla. Kotitehtävien läpikäynti Aloitetaan Pelifirman tietovaraston suunnittelu Jatketaan SQL-harjoituksia

CSE-A1200 Tietokannat

Hakukyselyt: SELECT * FROM taulu WHERE sarake1 = Malli Nimi [WHERE sarake1 LIKE M% ] [WHERE BETWEEN ehto1 AND ehto2] [WHERE sarake1 IN/= (alikysely)]

Joko tunnet nämän Oracle10g SQL:n piirteet? Kari Aalto Saariston IT

HELIA 1 (14) Outi Virkki Tiedonhallinta

HELIA TIKO-05 1 (22) ICT03D Tieto ja tiedon varastointi E.Räty, O.Virkki

Tiedonhallinnan perusteet. H11 Ovien ja kulun valvontajärjestelmän tietokanta

select tulostietomäärittely from taulukkeet [where valintaehdot] [group by ryhmitystekijät] [having ryhmärajoitteet] [order by järjestysperusta]

3. Taulujen määrittely ja muuttaminen

VIRTA-tietomallin laajentaminen - Lukuvuosi-maksu

3. TAULUJEN MÄÄRITTELY JA MUUTTAMINEN

Proseduurit, funktiot ja herättimet - esimerkkeinä Oracle, SQL Server, MySQL ja OCELOT. Jouni Huotari S2008

PROSEDUURIT, FUNKTIOT JA HERÄTTIMET - ESIMERKKEINÄ ORACLE, SQL SERVER, MYSQL JA OCELOT JOUNI HUOTARI K2009

Muita tietokantaobjekteja. Näkymät, synonyymit, indeksointi, valtuudet ja systeemihakemisto

MUITA TIETOKANTAOBJEKTEJA NÄKYMÄT, SYNONYYMIT, INDEKSOINTI, VALTUUDET JA SYSTEEMIHAKEMISTO

VIRTA-tiedon laadun tukeminen

SQL. ! nykystandardi SQL3 eli SQL'99. ! CREATE TABLE, ALTER TABLE ja DROP TABLE. ! CREATE VIEW ja DROP VIEW. ! CREATE INDEX ja DROP INDEX

Harjoitustyö. CSE-A1200 Tietokannat! Jasse Lahdenperä! ! Henri Nurmi! !

INSERT INTO koulutus VALUES ( Helsinki, 22.6, 4);

Koulutus- ja opetusyhteistyö ja VIRTA-tiedot

Koostefunktiot. Viisi standardifunktiota: Esim. montako henkilöä on henkilo-taulussa:

TIETOKANTOJEN PERUSTEET MARKKU SUNI

HELIA 1 (15) Outi Virkki Tietokantasuunnittelu

Treenitietokannan suunnitteludokumentti

Helsingin yliopisto Tietojenkäsittelytieteen laitos (H.Laine) Tietokantojen perusteet. Liitteenä: Tiivistelmä SQL-syntaksista

Tietokantojen perusteet, syksy 1999 SQL- osa Harri Laine 1. SQL-yhteenvetofunktiot. SQL-yhteenvetofunktiot

Näkymät ja tiedon suojaus

Tietokanta projektin alussa: create table kurssin_tila ( NOT NULL VARCHAR2(60) create table kurssin_tyyppi ( create table opintojakson_tyyppi (

Opintosuoritukset. Kaaviokuva

Näkökulmia Diploma Supplementiin /Päivi Aho

Virta-tietovarannosta saatavien tietojen tiedosto- ja tietuekuvaus alkaen

CS-A1150 Tietokannat CS-A1150 Tietokannat / 43

Lohdutus - tietokantadokumentti

Opettajana Mika Sorsa, HAMK:n ammatillisen opettajakoulutuksen opetusharjoittelija

CS-A1150 Tietokannat CS-A1150 Tietokannat / 44

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

Tehtävä 1. Tietojen lisääminen, poistaminen, päivittäminen ja tulostaminen

Helsingin yliopisto, tktl DO Tietokantojen perusteet, kevät 2000 SQL- osa Harri Laine 1. SQL-yhteenvetofunktiot. SQL-yhteenvetofunktiot

Harjoitustehtävä 1. Harjoitustehtävä 2. Harjoitustehtävä 2. Harjoitustehtävä 2. Harjoitustehtävä 2. SQL kysely

Tietokannat II -kurssin harjoitustyö

Helsingin yliopisto, tktl DO Tietokantojen perusteet, kevät 2000 SQL- osa Harri Laine 1. SQL-yhteenvetofunktiot. SQL-yhteenvetofunktiot

HELIA TIKO-05 1 (17) ICT03D Tieto ja tiedon varastointi Räty, Virkki

Ruokahalu kasvaa syödessä lisää makrokielen herkkuja

Denormalisointia turvallisesti. Ougf syysseminaari Pörssitalo Helsinki Timo Raitalaakso

TIEDONHALLINTA - SYKSY Luento 10. Hannu Markkanen /10/12 Helsinki Metropolia University of Applied Sciences

HELIA 1 (15) Outi Virkki Tietokantasuunnittelu

KOOSTEFUNKTIOT. Viisi standardifunktiota: Esim. montako henkilöä on henkilo-taulussa:

Kyselyn yleisrakenne:

Liitokset - haut useaan tauluun

Opiskeluoikeudet. Kaaviokuva

Makrojen mystinen maailma lyhyt oppimäärä

TIETOKANNAT: MYSQL & POSTGRESQL Seminaarityö

Tällä viikolla. Kotitehtävien tarkistus Upotettu SQL Indeksi-harjoitus täydennetään pelifirman tietokantamallia SQL-tehtäviä

VIRTA-termit ruotsiksi

VIRTA opintotietopalvelun tietomallin muutokset

Tietokannat. CREATE TABLE table(col1,col2,... ); Luo uuden taulun. CREATE TABLE opiskelijat(opnumero,etunimi,sukunimi);

Java ja tietokannan käsittely (JDBC)

HSMT Tietokannoista. Ville Leppänen. HSMT, c Ville Leppänen, IT, Turun yliopisto, 2008 p.1/32

Tietokannat. CREATE TABLE table(col1,col2,... ); Luo uuden taulun. CREATE TABLE opiskelijat(opnumero,etunimi,sukunimi);

YO 3.2. Opintopistetiedonkeruu 2015

Kirjoita kuhunkin erilliseen vastauspaperiin kurssin nimi, tentin päiväys, oma nimesi, syntymäaikasi ja nimikirjoituksesi.

OUTER JOIN se vanha kunnon kaveri

Tietokannat II -kurssin harjoitustyö

Suorituksen sisältyminen toiseen suoritukseen (jonka id)

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

HELIA 1 (14) Outi Virkki Tiedonhallinta

TIEDONHALLINTA - SYKSY Luento 8. Saapumisryhmä: Pasi Ranne /9/13 Helsinki Metropolia University of Applied Sciences

määritellä ja muokata tietokantaa ja sen käyttöoikeuksia virittää tietokannan talletusrakenteita hakea tietoa tietokannasta

Tietokantojen perusteet, syksy 1999 SQL- osa Harri Laine 1. SQL-valintaehto. SQL-valintaehto. Opettajien nimet: Opiskelijoiden pääaineet

Tietokantojen perusteet k2004helsingin yliopisto/tktl Tietokantojen perusteet, s 2005 SQL-perusteet. Harri Laine 1. SQL tietokantakieli

Esimerkki. pankkien talletus- ja lainatietokanta: Yhdiste, leikkaus, erotus ym. Leikkaus (intersect) Yhdiste (Union) Erotus (except/minus) Leikkaus

OpenOffice.org Base 3.1.0

Yhdiste, leikkaus, erotus ym.

ALMU-järjestelmä Suunnitteludokumentti

TIETOKANTOJEN PERUSTEET OSIO 11 MARKKU SUNI

SELECT-lauseen perusmuoto

Dynaamista ja joustavaa ohjelmointia - maukasta makrokielellä

Jatko-opinto oikeuden lisääminen HY:n tutkinto-opiskelijoille ja uusille opiskelijoille

Tietokannat. CREATE TABLE table(col1,col2,... ); Luo uuden taulun. CREATE TABLE opiskelijat(opnumero,etunimi,sukunimi);

Harjoituksen aiheena on tietokantapalvelimen asentaminen ja testaaminen. Asennetaan MySQL-tietokanta. Hieman linkkejä:

FinFamily PostgreSQL installation ( ) FinFamily PostgreSQL

Transkriptio:

55 op laskennan poimintakuvaus --- LUONNOS ---- Kerätään ensin perusjoukko, opiskelijat, pisteet, läsnäolotiedot omina osajoukkoina Virran tiedoista ja nämä osat yhdistellään jokaisen opiskelijan vuosijanaksi jotta hänen kohdalla voi suorittaa tilastovuosittain pankkilaskelmat vuosi vuodelta opiskelujen alusta. Lyhyt kuvaus kokonaislaskentaprosessista: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Lasketaan pisteet 2006-2016 Haetaan läsnäolotiedot 2006-2016 Haetaan opiskeluoikeustiedot 2006-2016 Poimitaan keväällä aloittaneet Poimitaan kaikki tilastovuoden uudet opiskelijat Alustetaan pankkitiedot Lasketaan kevällä aloittaneiden >= 27 op keränneet Lasketaan kumulatiivinen pankkitili Pankkisaldot kumulatiivisen laskennan jälkeen Kerätään yhteen opiskelijat Loppuraportti ylläolevasta per tilastovuosi Tilastovuosi: 20.9.Tilastovuosi Edellinen lukuvuosi: 1.8.tilastovuosi-1-31.7.tilastovuosi Aloittanut keväällä: Tilastovuoden aloituspäivämäärän kuukausi <= 7 Raportti Extravipusessa Esimerkki pankkilaskelma Tarkistustiedostot Mittarit Kysymykset ja vastaukset 1. Perusjoukko Opintopisteet Kaikki Virta lajin 2 (=muu opintosuoritus on valmiiksi poimittu näkymässä jossa opintopisteille poimitaan hyväksymispäivämäärä jos su oritukselle sellainen on, muuten päivämäärä on suorituksen päivämäärää. Pisteet lasketaan lukuvuosittain (edellinen lukuvuosi : syys 1.8.TILASTOVUOSI-1-31.12.TILASTOVUOSI-1 kevät 1.1.TILASTOVUOSI - 31.7.TILASTOVUOSI Opiskelijoille joille tälle ajanjaksolle olemassa aktiivinen alempi/ylempi korkeakoulututkinto oikeus (opiskeluoikeus tyyppiä 2, 4 tai AMK opiskelija (opiskeluoikeustyyppi 1 ja tältä ajalta kertyneet opintopisteet per lukukausi ja niiden summa. Vain lehtitason suorituksia. Näkymä (View kaikista Virran lajin 2 (muu suoritus josta poimitaan opintosuoritukselle sen hyväksilukupäivämäärä, jos sellainen on, muuten poimitaan suorituspäivämäärä

CREATE VIEW [Opintosuoritus_pvm] AS Opintopisteiden hyväksilukupvm näkymä Expand source SELECT CASE WHEN OH.Hyvaksilukupaivamaara IS NOT NULL THEN OH.Hyvaksilukupaivamaara ELSE OS.Suorituspaivamaara, END AS suorpvm OS.Suorituspaivamaara, OH.Hyvaksilukupaivamaara, OS.id AS opintosuoritusid, OS.OpiskelijaID, OS.Laajuus, OL.Koodi, OS.db FROM WHERE Opintosuoritus OS JOIN Opintosuorituksen_laji OL ON OL.id = OS.Opintosuorituksen_lajiID LEFT JOIN Opsuorituksen_hyvaksiluku OH ON OH.OpintosuoritusID = OS.id OL.Koodi = '2' Taulu johon kerätään opintopisteet lukukausittain (edellinen syys ja kevät tilastovuosittain per opiskelija: Pisteet55 Expand CREATE TABLE [Pisteet55]( source [oppilaitos] [varchar](20 NOT NULL, [oppilaitostunnus] [varchar](10 NOT NULL, [hetu] [varchar](11 NOT NULL, [opiskelijaavain] [varchar](100 NOT NULL, [opiskeluoikeusavain] [varchar](100 NULL, [vuosi] [int] NOT NULL, [edellinen_lv_syys_pisteet] [int] NULL CONSTRAINT [DF_Pisteet55_edellinen_lv_syys_pisteet] DEFAULT ((0, [edellinen_lv_kevat_pisteet] [int] NULL CONSTRAINT [DF_Pisteet55_edellinen_lv_kevat_pisteet] DEFAULT ((0, [summa] [int] NULL CONSTRAINT [DF_Pisteet55_summa] DEFAULT ((0, [reg_datum] [smalldatetime] NULL CONSTRAINT [DF_Pisteet55_reg_datum] DEFAULT (getdate( Alkuun

AMK pisteet per tilastovuosi (@vuosi_para, per korkeakoulu (@korkeakoulu: AMK Opintopisteet per lukuvuosi DECLARE @vuosi varchar(4 = @vuosi_para DECLARE @db varchar(20 = @korkeakoulu Expand source IF OBJECT_ID('tempdb..#param' IS NOT NULL BEGIN TRUNCATE TABLE #param DROP TABLE #param END IF OBJECT_ID('tempdb..#tkopisk' IS NOT NULL BEGIN TRUNCATE TABLE #tkopisk DROP TABLE #tkopisk END CREATE TABLE #param ( vuosi varchar(4, org varchar(30,--kk-lyhenne kk varchar(6 --Oppilaitos TRUNCATE TABLE #param INSERT INTO #param (vuosi,org,kk SELECT @vuosi as vuosi,@db as org,(select OrganisaatioKoodi FROM Yhteiset.Asetukset.Instanssit WHERE DB = @db as kk CREATE TABLE #tkopisk ( oppilaitostunnus varchar(6, hetu varchar(11, -- Henkilötunnus opiskelijaavain varchar(100, opiskeluoikeusavain varchar(100, opiskelija_id int, opiskeluoikeus_id int, opes int, -- Edellisenä syyslukukautena (1.8.-31.12. opintopisteiden määrä opek int -- Edellisenä kevätlukukautena (1.1.-31.07. opintopisteiden määrä CREATE NONCLUSTERED INDEX IX_tkopisk_opiskelija_id ON #tkopisk (opiskelija_id CREATE NONCLUSTERED INDEX IX_tkopisk_opiskelijaavain ON #tkopisk (opiskelijaavain

TRUNCATE TABLE #tkopisk INSERT into #tkopisk (oppilaitostunnus,hetu,opiskelijaavain,opiskelija_id,opiskeluoikeusavain,opiskelu oikeus_id SELECT DISTINCT oppilaitostunnus = (SELECT TOP 1 kk FROM #param, hetu = h.henkilotunnus, opiskelijaavain = p.avain, opiskelija_id = p.id, opiskeluoikeusavain = oo.avain, opiskeluoikeus_id = oo.id FROM Henkilo h INNER JOIN dbo.opiskelija p ON p.henkiloid = h.id INNER JOIN Opiskeluoikeus oo ON oo.opiskelijaid = p.id INNER JOIN Opiskeluoikeuden_tyyppi ot ON ot.id = oo.op_oikeuden_tyyppiid INNER JOIN Op_oikeuteen_liittyva_tila lt on lt.opiskeluoikeusid=oo.id INNER JOIN Opiskeluoikeuden_tila kt on kt.id=lt.op_oikeuden_tilaid WHERE 1=1 h.db = @db p.db = @db oo.db = @db lt.db = @db ot.koodi IN ('1' -- tutkinto-oikeus kt.koodi IN ('1' --aktiivinen p.id IN ( SELECT OS.OpiskelijaID FROM Opintosuoritus_pvm OS WHERE 1 = 1 os.db = @db OS.suorpvm BETWEEN cast(cast(@vuosi as int-1 AS varchar+'-08-01' cast(@vuosi AS varchar +'-07-31' OS.suorpvm >= OO.Alkamispaivamaara oo.id NOT IN (SELECT opiskeluoikeus_id FROM #tkopisk oo.id NOT IN (SELECT OOP.id FROM Opiskeluoikeus OOP WHERE OOP.Paattymispaivamaara <= cast(cast(@vuosi as int-1 AS varchar+'-08-01' OOP.db = @db INSERT into #tkopisk (oppilaitostunnus,hetu,opiskelijaavain,opiskelija_id,opiskeluoikeusavain,opiskelu oikeus_id SELECT DISTINCT oppilaitostunnus = (SELECT TOP 1 kk FROM #param, hetu = h.henkilotunnus, opiskelijaavain = p.avain

FROM, opiskelija_id = p.id, opiskeluoikeusavain = oo.avain, opiskeluoikeus_id = oo.id Henkilo h INNER JOIN dbo.opiskelija p ON p.henkiloid = h.id INNER JOIN Opiskeluoikeus oo ON oo.opiskelijaid = p.id INNER JOIN Opiskeluoikeuden_tyyppi ot ON ot.id = oo.op_oikeuden_tyyppiid INNER JOIN Op_oikeuteen_liittyva_tila lt on lt.opiskeluoikeusid=oo.id INNER JOIN Opiskeluoikeuden_tila kt on kt.id=lt.op_oikeuden_tilaid WHERE 1=1 h.db = @db p.db = @db oo.db = @db lt.db = @db ot.koodi IN ('1' -- tutkinto-oikeus kt.koodi IN ('1' --aktiivinen cast(cast(@vuosi as int-1 AS varchar + '-08-01' BETWEEN lt.alkamispaivamaara coalesce(lt.paattymispaivamaara,'9999-01-01' p.id NOT IN ( SELECT OS.OpiskelijaID FROM Opintosuoritus_pvm OS WHERE 1 = 1 os.db = @db OS.suorpvm BETWEEN cast(cast(@vuosi as int-1 AS varchar+'-08-01' cast(@vuosi AS varchar +'-07-31' -- Tässä lisäys Opiskeluoikeuden alkamisen jälkeen OS.suorpvm >= OO.Alkamispaivamaara oo.id NOT IN (SELECT opiskeluoikeus_id FROM #tkopisk oo.id NOT IN (SELECT OOP.id FROM Opiskeluoikeus OOP WHERE OOP.Paattymispaivamaara <= cast(cast(@vuosi as int-1 AS varchar+'-08-01' OOP.db = @db IF OBJECT_ID('tempdb..#pisteet' IS NOT NULL BEGIN TRUNCATE TABLE #pisteet DROP TABLE #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, es bit, ek bit 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] INSERT INTO #pisteet (opiskelija_id,opiskeluoikeus_id,opintosuoritus_id,laajuus,suoritus_pvm,es,ek SELECT opiskelija_id = s.opiskelijaid,opiskeluoikeus_id = s.opiskeluoikeusid,opintosuoritus_id = s.id,laajuus = s.laajuus,suoritus_pvm = OS.suorpvm,es = CASE WHEN OS.suorpvm BETWEEN CAST(cast(@vuosi as int-1 AS varchar+'-08-01' CAST(cast(@vuosi AS int-1 AS varchar+'-12-31' THEN 1 ELSE 0 END,ek = CASE WHEN OS.suorpvm BETWEEN CAST(@vuosi AS varchar+'-01-01' CAST(@vuosi AS varchar+'-07-31' THEN 1 ELSE 0 END FROM Opintosuoritus s INNER JOIN Opintosuoritus_pvm OS ON OS.opintosuoritusid = s.id WHERE 1=1 s.db = @db OS.db = @db s.id NOT IN (SELECT ss.opintosuoritusid FROM Op_suor_sisaltyvyys ss WHERE ss.db = @db SET opes=( SELECT cast(round(sum( CASE WHEN s.es = 1 THEN s.laajuus ELSE 0 END,0 AS int FROM #pisteet s WHERE s.opiskelija_id=t.opiskelija_id s.opiskeluoikeus_id=t.opiskeluoikeus_id GROUP BY s.opiskelija_id WHERE opes IS NULL

SET opek=( SELECT cast(round(sum( CASE WHEN s.ek = 1 THEN s.laajuus ELSE 0 END,0 AS int FROM #pisteet s WHERE s.opiskelija_id=t.opiskelija_id s.opiskeluoikeus_id=t.opiskeluoikeus_id GROUP BY s.opiskelija_id WHERE opek IS NULL set opes=0 WHERE opes IS NULL set opek=0 WHERE opek IS NULL -- opiskeluoikeusavain SET opiskeluoikeus_id = o.id, opiskeluoikeusavain = o.avain 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 INNER JOIN Opiskeluoikeusjakso oj on oj.opiskeluoikeusid = O.id WHERE 1=1 o.db = @db lt.db = @db oj.db = @db -- tutkinto-tyyppinen ot.koodi IN ('1' kt.koodi IN ('1' --aktiivinen cast(cast(@vuosi as int-1 AS varchar + '-08-01' BETWEEN oj.alkamispaivamaara coalesce(oj.paattymispaivamaara,'9999-01-01' SELECT DISTINCT @db AS oppilaitos,t.oppilaitostunnus,coalesce(t.hetu,'' "hetu", T.opiskelijaAvain, T.opiskeluoikeusAvain,@vuosi AS vuosi

,coalesce(t.opes,0 "edellinen_lv_syys_pisteet" -- (1.8-31.12.,coalesce(T.opek,0 "edellinen_lv_kevat_pisteet" -- (1.1-31.07.,(T.opes + T.opek "Summa" -- opes + opek DROP TABLE #tkopisk DROP TABLE #pisteet DROP TABLE #param

YO Opintopisteet per lukuvuosi DECLARE @vuosi varchar(4 = @vuosi_para DECLARE @db varchar(20 = @korkeakoulu Expand source IF OBJECT_ID('tempdb..#param' IS NOT NULL BEGIN TRUNCATE TABLE #param DROP TABLE #param END IF OBJECT_ID('tempdb..#tkopisk' IS NOT NULL BEGIN TRUNCATE TABLE #tkopisk DROP TABLE #tkopisk END CREATE TABLE #param ( vuosi varchar(4, org varchar(30,--kk-lyhenne kk varchar(6 --Yliopisto INSERT INTO #param (vuosi,org,kk SELECT @vuosi as vuosi,@db as org,(select OrganisaatioKoodi FROM Yhteiset.Asetukset.Instanssit WHERE DB = @db as kk CREATE TABLE #tkopisk ( oppilaitostunnus varchar(6, hetu varchar(11, -- Henkilötunnus opiskelijaavain varchar(100, opiskeluoikeusavain varchar(100, opiskelija_id int, opiskeluoikeus_id int, opes int, -- Edellisenä syyslukukautena (1.8.-31.12. opintopisteiden määrä opek int -- Edellisenä kevätlukukautena (1.1.-31.07. opintopisteiden määrä CREATE NONCLUSTERED INDEX IX_tkopisk_opiskelija_id ON #tkopisk (opiskelija_id CREATE NONCLUSTERED INDEX IX_tkopisk_opiskelijaavain ON #tkopisk

(opiskelijaavain INSERT into #tkopisk (oppilaitostunnus,hetu,opiskelijaavain,opiskelija_id SELECT oppilaitostunnus = (SELECT TOP 1 kk FROM #param, hetu = h.henkilotunnus, opiskelijaavain = p.avain, opiskelija_id = p.id FROM Henkilo h INNER JOIN dbo.opiskelija p ON p.henkiloid = h.id WHERE 1=1 h.db = @db p.db = @db -- tutkinto-oikeus p.id IN ( SELECT oo.opiskelijaid FROM Opiskeluoikeus oo INNER JOIN Opiskeluoikeuden_tyyppi ot on ot.id = oo.op_oikeuden_tyyppiid INNER JOIN Op_oikeuteen_liittyva_tila lt on lt.opiskeluoikeusid=oo.id INNER JOIN Opiskeluoikeuden_tila kt on kt.id=lt.op_oikeuden_tilaid WHERE 1=1 oo.db = @db lt.db = @db -- tutkinto-tyyppinen opiskeluoikeus ot.koodi IN ('2','4' kt.koodi IN ('1' -- aktiivinen p.id in ( SELECT FROM OS.OpiskelijaID Opintosuoritus_pvm OS JOIN Opiskeluoikeus OO ON OO.OpiskelijaID = OS.OpiskelijaID WHERE 1 = 1 os.db = @db OS.suorpvm BETWEEN cast(cast(@vuosi as int-1 AS varchar+'-08-01' cast(@vuosi AS varchar +'-07-31' OS.suorpvm >= oo.alkamispaivamaara p.id NOT IN (SELECT opiskelija_id FROM #tkopisk INSERT into #tkopisk (oppilaitostunnus,hetu,opiskelijaavain,opiskelija_id SELECT oppilaitostunnus = (SELECT TOP 1 kk FROM #param, hetu = h.henkilotunnus, opiskelijaavain = p.avain, opiskelija_id = p.id FROM Henkilo h INNER JOIN dbo.opiskelija p ON p.henkiloid = h.id WHERE 1=1 h.db = @db p.db = @db -- tutkinto-oikeus

p.id IN ( SELECT oo.opiskelijaid FROM Opiskeluoikeus oo INNER JOIN Opiskeluoikeuden_tyyppi ot on ot.id = oo.op_oikeuden_tyyppiid INNER JOIN Op_oikeuteen_liittyva_tila lt on lt.opiskeluoikeusid=oo.id INNER JOIN Opiskeluoikeuden_tila kt on kt.id=lt.op_oikeuden_tilaid WHERE 1=1 oo.db = @db lt.db = @db -- tutkinto-tyyppinen opiskeluoikeus ot.koodi IN ('2','4' kt.koodi IN ('1' -- aktiivinen cast(cast(@vuosi as int-1 AS varchar + '-08-01' BETWEEN lt.alkamispaivamaara coalesce(lt.paattymispaivamaara,'9999-01-01' oo.id NOT IN (SELECT OOP.id FROM Opiskeluoikeus OOP WHERE OOP.Paattymispaivamaara <= cast(cast(@vuosi as int-1 AS varchar+'-08-01' OOP.db = @db p.id NOT IN ( SELECT FROM OS.OpiskelijaID Opintosuoritus_pvm OS JOIN Opiskeluoikeus OO ON OO.OpiskelijaID = OS.OpiskelijaID WHERE 1 = 1 os.db = @db OS.suorpvm BETWEEN cast(cast(@vuosi as int-1 AS varchar+'-08-01' cast(@vuosi AS varchar +'-07-31' OS.suorpvm >= oo.alkamispaivamaara p.id NOT IN (SELECT opiskelija_id FROM #tkopisk IF OBJECT_ID('tempdb..#pisteet' IS NOT NULL BEGIN TRUNCATE TABLE #pisteet DROP TABLE #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, es bit, ek bit

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] INSERT INTO #pisteet (opiskelija_id,opiskeluoikeus_id,opintosuoritus_id,laajuus,suoritus_pvm,es,ek SELECT opiskelija_id = s.opiskelijaid,opiskeluoikeus_id = s.opiskeluoikeusid,opintosuoritus_id = s.id,laajuus = s.laajuus,suoritus_pvm = OS.suorpvm,es = CASE WHEN OS.suorpvm BETWEEN CAST(cast(@vuosi as int-1 AS varchar+'-08-01' CAST(cast(@vuosi AS int-1 AS varchar+'-12-31' THEN 1 ELSE 0 END,ek = CASE WHEN OS.suorpvm BETWEEN CAST(@vuosi AS varchar+'-01-01' CAST(@vuosi AS varchar+'-07-31' THEN 1 ELSE 0 END FROM Opintosuoritus s INNER JOIN Opintosuoritus_pvm OS ON OS.opintosuoritusid = s.id WHERE 1=1 s.db = @db OS.db = @db s.id NOT IN (SELECT ss.opintosuoritusid FROM Op_suor_sisaltyvyys ss WHERE ss.db = @db SET opes=( SELECT cast(round(sum( CASE WHEN s.es = 1 THEN s.laajuus ELSE 0 END,0 AS int FROM #pisteet s WHERE s.opiskelija_id=t.opiskelija_id -- and s.opiskeluoikeus_id=t.opiskeluoikeus_id GROUP BY s.opiskelija_id WHERE opes IS NULL SET opek=( SELECT cast(round(sum( CASE WHEN s.ek = 1 THEN s.laajuus ELSE 0 END,0 AS int FROM #pisteet s WHERE s.opiskelija_id=t.opiskelija_id -- and s.opiskeluoikeus_id=t.opiskeluoikeus_id GROUP BY s.opiskelija_id

WHERE opek IS NULL set opes=0 WHERE opes IS NULL set opek=0 WHERE opek IS NULL -- opiskeluoikeusavain SET opiskeluoikeus_id = o.id, opiskeluoikeusavain = o.avain 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 INNER JOIN Opiskeluoikeusjakso oj on oj.opiskeluoikeusid = O.id WHERE 1=1 o.db = @db lt.db = @db oj.db = @db -- tutkinto-tyyppinen ot.koodi IN ('2','4' kt.koodi IN ('1' --aktiivinen cast(cast(@vuosi as int-1 AS varchar + '-08-01' BETWEEN oj.alkamispaivamaara coalesce(oj.paattymispaivamaara,'9999-01-01' SELECT DISTINCT @db AS oppilaitos,t.oppilaitostunnus,coalesce(t.hetu,'' "hetu", T.opiskelijaAvain, T.opiskeluoikeusAvain,@vuosi AS vuosi,coalesce(t.opes,0 "edellinen_lv_syys_pisteet" -- (1.8-31.12.,coalesce(T.opek,0 "edellinen_lv_kevat_pisteet" -- (1.1-31.07.,(T.opes + T.opek "Summa" -- opes + opek

DROP TABLE #tkopisk DROP TABLE #pisteet DROP TABLE #param

Alkuun 2. Perusjoukko Läsnäolot Lukuvuosi-ilmoittaumiset (läsnä/poissa/ei kirjoilla, 1/2/0. Poissa (2 sisältää sekä 2=Poissa, 3=Poissa ei kuluta opintoaikaa syys kevät syys 1.8.TILASTOVUOSI-1-31.12.TILASTOVUOSI-1 (edellinen_syys_olo 1.1.TILASTOVUOSI- 31.7.TILASTOVUOSI(kevat_olo 1.8.TILASTOVUOSI- 31.12.TILASTOVUOSI(syys_olo Opiskelijoille joilla on ollut aikajaksolla aktiivinen opiskeluoikeus ja jolta löytyy läsnolotietoja. Taulu johon kerätään läsnäolot syys, kevät ja edellinen syys tilastovuosittain per opiskelija Lasnaolo55 Expand CREATE TABLE [Lasnaolo55]( source [oppilaitos] [varchar](20 NOT NULL, [oppilaitostunnus] [varchar](10 NOT NULL, [hetu] [varchar](11 NOT NULL, [opiskelijaavain] [varchar](100 NOT NULL, [opiskeluoikeusavain] [varchar](100 NULL, [vuosi] [int] NOT NULL, [syys_olo] [smallint] NULL CONSTRAINT [DF_Lasnaolo55_syys_olo] DEFAULT ((0, [kevat_olo] [smallint] NULL CONSTRAINT [DF_LasnaOlo55_kevat_olo] DEFAULT ((0, [edellinen_syys_olo] [smallint] NULL CONSTRAINT [DF_Lasnaolo55_edellinen_syys_olo] DEFAULT ((0, [uusi_opisk_kevat] [smallint] NULL CONSTRAINT [DF_Lasnaolo55_uusi_opisk_kevat] DEFAULT ((0, [uusi_opisk] [smallint] NULL CONSTRAINT [DF_Lasnaolo55_uusi_opisk] DEFAULT ((0, [reg_datum] [smalldatetime] NULL CONSTRAINT [DF_Lasnaolo55_reg_datum] DEFAULT (getdate( Alkuun Läsnäolotiedot per tilastovuosi (@vuosi_para, per korkeakoulu (@korkeakoulu: AMK Läsnäolot AMK DECLARE @vuosi varchar(4 = @vuosi_para DECLARE @db varchar(20 = @korkeakoulu Expand source IF OBJECT_ID('tempdb..#param' IS NOT NULL

BEGIN TRUNCATE TABLE #param DROP TABLE #param END IF OBJECT_ID('tempdb..#tkopisk' IS NOT NULL BEGIN TRUNCATE TABLE #tkopisk DROP TABLE #tkopisk END CREATE TABLE #param ( vuosi varchar(4, org varchar(30,--kk-lyhenne kk varchar(6 --Yliopisto INSERT INTO #param (vuosi,org,kk SELECT @vuosi as vuosi,@db as org,(select OrganisaatioKoodi FROM Yhteiset.Asetukset.Instanssit WHERE DB = @db as kk CREATE TABLE #tkopisk ( oppilaitostunnus varchar(6, hetu varchar(11, -- Henkilötunnus opiskelijaavain varchar(100, opiskeluoikeusavain varchar(100, opiskelija_id int, opiskeluoikeus_id int, olotamm smallint, -- Ilmoittautunut keväällä olosyys smallint, -- Ilmoittautunut syksyllä edellinen_syysolo smallint -- Edellinen syysolotilanne TRUNCATE TABLE #tkopisk CREATE NONCLUSTERED INDEX IX_tkopisk_opiskelija_id ON #tkopisk (opiskelija_id CREATE NONCLUSTERED INDEX IX_tkopisk_opiskelijaavain ON #tkopisk (opiskelijaavain CREATE NONCLUSTERED INDEX IX_tkopisk_opiskeluoikeus_id ON #tkopisk (opiskeluoikeus_id CREATE NONCLUSTERED INDEX IX_tkopisk_opiskeluoikeusavain ON #tkopisk (opiskeluoikeusavain INSERT into #tkopisk (oppilaitostunnus,hetu,opiskelijaavain,opiskelija_id,opiskeluoikeus_id,opiskeluoi keusavain SELECT DISTINCT oppilaitostunnus = (SELECT TOP 1 kk FROM #param

, hetu = h.henkilotunnus, opiskelijaavain = p.avain, opiskelija_id = p.id, opiskeluoikeus_id = oo.id, opiskeluoikeusavain = oo.avain FROM Henkilo h INNER JOIN dbo.opiskelija p ON p.henkiloid = h.id INNER JOIN Opiskeluoikeus oo ON oo.opiskelijaid = p.id INNER JOIN Opiskeluoikeuden_tyyppi ot ON ot.id = oo.op_oikeuden_tyyppiid INNER JOIN Op_oikeuteen_liittyva_tila lt ON lt.opiskeluoikeusid = oo.id INNER JOIN Opiskeluoikeuden_tila kt ON kt.id = lt.op_oikeuden_tilaid WHERE 1 = 1 h.db = @db p.db = @db oo.db = @db lt.db = @db ot.koodi IN ('1' -- tutkinto-oikeus kt.koodi IN ('1' -- aktiivinen cast(cast(@vuosi as int-1 AS varchar + '-08-01' BETWEEN lt.alkamispaivamaara coalesce(lt.paattymispaivamaara,'9999-01-01' oo.id IN ( SELECT OpiskeluoikeusID FROM Lukukausi_ilmoittautuminen l INNER JOIN Lukukausi_ilm_tila lt ON lt.id = l.lukukausi_ilmoittautumisen_tilaid WHERE l.db = @db lt.koodi IN ('1','2','3' l.alkamispaivamaara BETWEEN cast(cast(@vuosi as int-1 as varchar+'-08-01' cast(cast(@vuosi as int as varchar+'-12-31' -- Viimeinen tilaisuus tulla mukaan perusjoukkoon INSERT into #tkopisk (oppilaitostunnus,hetu,opiskelijaavain,opiskelija_id,opiskeluoikeus_id,opiskeluoi keusavain SELECT DISTINCT oppilaitostunnus = (SELECT TOP 1 kk FROM #param, hetu = h.henkilotunnus, opiskelijaavain = p.avain, opiskelija_id = p.id, opiskeluoikeus_id = oo.id, opiskeluoikeusavain = oo.avain FROM Henkilo h INNER JOIN dbo.opiskelija p ON p.henkiloid = h.id INNER JOIN Opiskeluoikeus oo ON oo.opiskelijaid = p.id INNER JOIN Opiskeluoikeuden_tyyppi ot ON ot.id = oo.op_oikeuden_tyyppiid INNER JOIN Op_oikeuteen_liittyva_tila lt on lt.opiskeluoikeusid=oo.id INNER JOIN Opiskeluoikeuden_tila kt on kt.id=lt.op_oikeuden_tilaid

WHERE 1=1 oo.id NOT IN (SELECT opiskeluoikeus_id AS ID FROM #tkopisk -- Ei edellisessä h.db = @db p.db = @db oo.db = @db lt.db = @db ot.koodi IN ('1' -- tutkinto-oikeus kt.koodi IN ('1' -- aktiivinen -- cast(cast(@vuosi as int AS varchar + '-01-01' BETWEEN lt.alkamispaivamaara coalesce(lt.paattymispaivamaara,'9999-01-01' -- jolla on läsnäoloja oo.id IN ( SELECT OpiskeluoikeusID AS ID FROM Lukukausi_ilmoittautuminen l INNER JOIN Lukukausi_ilm_tila lt ON lt.id = l.lukukausi_ilmoittautumisen_tilaid WHERE l.db = @db lt.koodi IN ('1','2','3' l.alkamispaivamaara BETWEEN cast(@vuosi AS varchar + '-01-01' cast(@vuosi AS varchar +'-12-31' -- Läsnäolotiedot -- olotamm :: kevään ilmo tilanne set T.olotamm = 1 WHERE T.opiskeluoikeus_id IN ( SELECT OpiskeluoikeusID FROM Lukukausi_ilmoittautuminen l inner join Lukukausi_ilm_tila lt on lt.id = l.lukukausi_ilmoittautumisen_tilaid WHERE l.db = @db lt.koodi IN ('1' -- läsnä -- 2015-01-01 l.alkamispaivamaara BETWEEN cast(@vuosi AS varchar +'-01-01' cast(@vuosi AS varchar +'-07-31' and T.olotamm is null ;

set T.olotamm = 2 WHERE T.opiskeluoikeus_id IN ( SELECT OpiskeluoikeusID FROM Lukukausi_ilmoittautuminen l inner join Lukukausi_ilm_tila lt on lt.id=l.lukukausi_ilmoittautumisen_tilaid WHERE l.db = @db lt.koodi IN ('2','3' -- poissa, poissa ei kuluta -- "2015-01-01" l.alkamispaivamaara BETWEEN cast(@vuosi AS varchar + '-01-01' cast(@vuosi AS varchar + '-07-31' and T.olotamm is null ; -- ei ilmoa keväällä, nollaksi set T.olotamm=0 WHERE T.olotamm is null ; -- olosyys set T.olosyys = 1 WHERE T.opiskeluoikeus_id IN ( SELECT OpiskeluoikeusID FROM Lukukausi_ilmoittautuminen l inner join Lukukausi_ilm_tila lt on lt.id=l.lukukausi_ilmoittautumisen_tilaid WHERE l.db = @db lt.koodi IN ('1' -- läsnä -- 2015-08-01 l.alkamispaivamaara BETWEEN cast(@vuosi AS varchar + '-08-01' cast(@vuosi AS varchar + '-12-31' and T.olosyys is null ; set T.olosyys = 2 WHERE T.opiskeluoikeus_id IN ( SELECT OpiskeluoikeusID FROM Lukukausi_ilmoittautuminen l inner join Lukukausi_ilm_tila lt on lt.id=l.lukukausi_ilmoittautumisen_tilaid WHERE l.db = @db lt.koodi IN ('2','3' -- poissa, poissa ei kuluta

-- 2015-08-01 l.alkamispaivamaara BETWEEN cast(@vuosi AS varchar + '-08-01' cast(@vuosi AS varchar + '-12-31' and T.olosyys is null ; -- ei ilmoa syksyllä, nollaksi set T.olosyys=0 WHERE T.olosyys is null ; -- edellinen olosyys set T.edellinen_syysolo = 1 WHERE opiskeluoikeus_id IN ( SELECT OpiskeluoikeusID FROM Lukukausi_ilmoittautuminen l inner join Lukukausi_ilm_tila lt on lt.id=l.lukukausi_ilmoittautumisen_tilaid WHERE l.db = @db lt.koodi IN ('1' -- läsnä l.alkamispaivamaara BETWEEN cast(cast(@vuosi as int-1 as varchar+'-08-01' cast(cast(@vuosi as int-1 as varchar+'-12-31' and T.edellinen_syysolo is null ; set T.edellinen_syysolo = 2 WHERE opiskeluoikeus_id IN ( SELECT OpiskeluoikeusID FROM Lukukausi_ilmoittautuminen l inner join Lukukausi_ilm_tila lt on lt.id=l.lukukausi_ilmoittautumisen_tilaid WHERE l.db = @db lt.koodi IN ('2','3' -- poissa, poissa ei kuluta l.alkamispaivamaara BETWEEN cast(cast(@vuosi as int-1 as varchar+'-08-01' cast(cast(@vuosi as int-1 as varchar+'-12-31' and T.edellinen_syysolo is null ; -- ei ilmoa syksyllä, nollaksi set T.edellinen_syysolo=0

WHERE T.edellinen_syysolo is null ; SELECT DISTINCT @db AS oppilaitos, T.oppilaitostunnus, COALESCE(T.hetu,'' "hetu", T.opiskelijaAvain, T.opiskeluoikeusAvain, @vuosi AS vuosi, COALESCE(T.olosyys,0 "syys_olo", COALESCE(T.olotamm,0 "kevat_olo", T.edellinen_syysolo "edellinen_syys_olo" WHERE (T.olotamm + T.olosyys + COALESCE(T.edellinen_syysolo,0 > 0 DROP TABLE #tkopisk DROP TABLE #param

YO Läsnäolot YO Expand source DECLARE @vuosi varchar(4 = @vuosi_para DECLARE @db varchar(20 = @korkeakoulu IF OBJECT_ID('tempdb..#param' IS NOT NULL BEGIN TRUNCATE TABLE #param DROP TABLE #param END IF OBJECT_ID('tempdb..#tkopisk' IS NOT NULL BEGIN TRUNCATE TABLE #tkopisk DROP TABLE #tkopisk END CREATE TABLE #param ( vuosi varchar(4, org varchar(30,--kk-lyhenne kk varchar(6 --Yliopisto INSERT INTO #param (vuosi,org,kk SELECT @vuosi as vuosi,@db as org,(select OrganisaatioKoodi FROM Yhteiset.Asetukset.Instanssit WHERE DB = @db as kk CREATE TABLE #tkopisk ( oppilaitostunnus varchar(6, hetu varchar(11, -- Henkilötunnus opiskelijaavain varchar(100, opiskeluoikeusavain varchar(100, opiskelija_id int, opiskeluoikeus_id int, olotamm smallint, -- Ilmoittautunut keväällä olosyys smallint, -- Ilmoittautunut syksyllä edellinen_syysolo smallint -- Edellinen syysolotilanne

CREATE NONCLUSTERED INDEX IX_tkopisk_opiskelija_id ON #tkopisk (opiskelija_id CREATE NONCLUSTERED INDEX IX_tkopisk_opiskelijaavain ON #tkopisk (opiskelijaavain INSERT into #tkopisk (oppilaitostunnus,hetu,opiskelijaavain,opiskelija_id SELECT oppilaitostunnus = (SELECT TOP 1 kk FROM #param, hetu = h.henkilotunnus, opiskelijaavain = p.avain, opiskelija_id = p.id FROM Henkilo h INNER JOIN dbo.opiskelija p ON p.henkiloid = h.id WHERE 1=1 h.db = @db p.db = @db -- tutkinto-oikeus p.id IN ( SELECT oo.opiskelijaid FROM Opiskeluoikeus oo INNER JOIN Opiskeluoikeuden_tyyppi ot on ot.id = oo.op_oikeuden_tyyppiid INNER JOIN Op_oikeuteen_liittyva_tila lt on lt.opiskeluoikeusid=oo.id INNER JOIN Opiskeluoikeuden_tila kt on kt.id=lt.op_oikeuden_tilaid WHERE 1=1 oo.db = @db lt.db = @db -- tutkinto-tyyppinen opiskeluoikeus ot.koodi IN ('2','4' kt.koodi IN ('1' -- aktiivinen p.id in ( -- ja jolla läsnäoloja SELECT OpiskelijaID FROM Lukukausi_ilmoittautuminen l INNER JOIN Lukukausi_ilm_tila lt on lt.id = l.lukukausi_ilmoittautumisen_tilaid WHERE lt.koodi IN ('1','2','3' l.db = @db l.alkamispaivamaara BETWEEN cast(cast(@vuosi as int-1 as varchar+'-08-01' cast(cast(@vuosi as int AS varchar+'-12-31' p.id NOT IN (SELECT opiskelija_id FROM #tkopisk -- opiskeluoikeusavain SET opiskeluoikeus_id = o.id, opiskeluoikeusavain = o.avain 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 INNER JOIN Opiskeluoikeusjakso oj on oj.opiskeluoikeusid = O.id WHERE 1=1 o.db = @db lt.db = @db oj.db = @db -- tutkinto-tyyppinen ot.koodi IN ('2','4' kt.koodi IN ('1' --aktiivinen cast(cast(@vuosi as int-1 AS varchar + '-08-01' BETWEEN oj.alkamispaivamaara coalesce(oj.paattymispaivamaara,'9999-01-01' o.opiskelijaid in ( SELECT OpiskelijaID FROM Lukukausi_ilmoittautuminen l INNER JOIN Lukukausi_ilm_tila lt on lt.id = l.lukukausi_ilmoittautumisen_tilaid WHERE lt.koodi IN ('1','2','3' l.db = @db l.alkamispaivamaara BETWEEN cast(cast(@vuosi as int-1 as varchar+'-08-01' cast(cast(@vuosi as int AS varchar+'-12-31' -- Läsnäolotiedot SET olotamm = 1 WHERE opiskelija_id in ( SELECT OpiskelijaID FROM Lukukausi_ilmoittautuminen l inner join Lukukausi_ilm_tila lt on lt.id=l.lukukausi_ilmoittautumisen_tilaid WHERE lt.koodi IN ('1' --läsnä l.db = @db -- Esim. 2015-01-01 l.alkamispaivamaara BETWEEN cast(@vuosi AS varchar +'-01-01' cast(@vuosi AS varchar +'-07-31' olotamm is null set olotamm = 2 WHERE opiskelija_id in ( SELECT OpiskelijaID FROM Lukukausi_ilmoittautuminen l inner join Lukukausi_ilm_tila lt on lt.id=l.lukukausi_ilmoittautumisen_tilaid WHERE lt.koodi in ('2','3' --poissa, poissa ei kuluta l.db = @db

-- Esim. 2015-01-01 l.alkamispaivamaara BETWEEN cast(@vuosi AS varchar +'-01-01' cast(@vuosi AS varchar +'-07-31' and olotamm is null -- ei ilmoa keväällä, tyhjäksi set olotamm = 0 WHERE olotamm is null -- olosyys :: syksyn ilmo tilanne set olosyys= 1 WHERE opiskelija_id in ( SELECT OpiskelijaID FROM Lukukausi_ilmoittautuminen l inner join Lukukausi_ilm_tila lt on lt.id=l.lukukausi_ilmoittautumisen_tilaid WHERE lt.koodi IN ('1' --läsnä l.db = @db -- Esim. 2015-08-01 l.alkamispaivamaara BETWEEN cast(@vuosi AS varchar + '-08-01' cast(@vuosi AS varchar + '-12-31' olosyys is null set olosyys = 2 WHERE opiskelija_id in ( SELECT OpiskelijaID FROM Lukukausi_ilmoittautuminen l inner join Lukukausi_ilm_tila lt on lt.id=l.lukukausi_ilmoittautumisen_tilaid WHERE lt.koodi in ('2','3' --poissa, poissa ei kuluta l.db = @db -- Esim. 2015-08-01 l.alkamispaivamaara BETWEEN cast(@vuosi AS varchar + '-08-01' cast(@vuosi AS varchar + '-12-31' olosyys is null -- edellinen olosyys set edellinen_syysolo = 1

WHERE opiskelija_id in ( SELECT OpiskelijaID FROM Lukukausi_ilmoittautuminen l inner join Lukukausi_ilm_tila lt on lt.id=l.lukukausi_ilmoittautumisen_tilaid WHERE l.db = @db lt.koodi IN ('1' -- läsnä l.alkamispaivamaara BETWEEN cast(cast(@vuosi as int-1 as varchar+'-08-01' cast(cast(@vuosi as int-1 as varchar+'-12-31' and edellinen_syysolo is null set edellinen_syysolo = 2 WHERE opiskelija_id in ( SELECT OpiskelijaID FROM Lukukausi_ilmoittautuminen l inner join Lukukausi_ilm_tila lt on lt.id=l.lukukausi_ilmoittautumisen_tilaid WHERE l.db = @db lt.koodi IN ('2','3' -- poissa, poissa ei kuluta l.alkamispaivamaara BETWEEN cast(cast(@vuosi as int-1 as varchar+'-08-01' cast(cast(@vuosi as int-1 as varchar+'-12-31' and edellinen_syysolo is null -- ei ilmoa syksyllä, nollaksi set edellinen_syysolo=0 WHERE edellinen_syysolo is null SELECT DISTINCT @db AS oppilaitos, T.oppilaitostunnus, COALESCE(T.hetu,'' "hetu", T.opiskelijaAvain, T.opiskeluoikeusAvain, @vuosi AS vuosi, COALESCE(T.olosyys,0 "syys_olo", COALESCE(T.olotamm,0 "kevat_olo", T.edellinen_syysolo "edellinen_syys_olo"

WHERE (T.olotamm + T.olosyys + COALESCE(T.edellinen_syysolo,0 > 0 DROP TABLE #tkopisk

DROP TABLE #param Alkuun 3. Perusjoukko Opiskeluoikeudet Ajanjaksoille syys kevät 1.8.TILASTOVUOSI-1-31.12.TILASTOVUOSI-1 1.1.TILASTOVUOSI- 31.7.TILASTOVUOSI Poimintaan opiskeluoikeuden alkamis päivämäärä ja opiskelujen aloituspäivä ensimmäisen läsnäolotiedon mukaan. Lisäksi opiskeluoikeusjaksosta Tilastokeskuksen 6-numeroinen tutkinto koodi. Taulu johon kerätään opiskeluoikeudet tilastovuosittain per opiskelija: Opiskeluoikeus55 Expand CREATE TABLE [Opiskeluoikeus55]( source [oppilaitos] [varchar](20 NOT NULL, [oppilaitostunnus] [varchar](10 NOT NULL, [hetu] [varchar](11 NOT NULL, [opiskelijaavain] [varchar](100 NOT NULL, [opiskeluoikeusavain] [varchar](100 NULL, [vuosi] [int] NOT NULL, [tila] [smallint] NULL, [lo_aloituspvm] [date] NULL, [oo_aloituspvm] [date] NULL, [Tkkoodi] [varchar](10 NULL, [reg_datum] [smalldatetime] NULL CONSTRAINT [DF_Opiskeluoikeus55_reg_datum] DEFAULT (getdate( Opiskeluoikeudet AMK DECLARE @vuosi varchar(4 = @vuosi_para DECLARE @db varchar(20 = @korkeakoulu Expand source IF OBJECT_ID('tempdb..#param' IS NOT NULL BEGIN TRUNCATE TABLE #param DROP TABLE #param END IF OBJECT_ID('tempdb..#tkopisk' IS NOT NULL BEGIN TRUNCATE TABLE #tkopisk DROP TABLE #tkopisk END

CREATE TABLE #param ( vuosi varchar(4, org varchar(30,--kk-lyhenne kk varchar(6 --Oppilaitos TRUNCATE TABLE #param INSERT INTO #param (vuosi,org,kk SELECT @vuosi as vuosi,@db as org,(select OrganisaatioKoodi FROM Yhteiset.Asetukset.Instanssit WHERE DB = @db as kk CREATE TABLE #Aloittanut ( oid int, minalkamispaivamaara date, LAlkamispaivamaara date, OAlkamispaivamaara date, opiskelija_id int not null CREATE TABLE #Min_aloituspvm ( oid int, alk_pvm date CREATE TABLE #tkopisk ( oppilaitostunnus varchar(6, hetu varchar(11, opiskelijaavain varchar(100, opiskeluoikeusavain varchar(100, opiskelija_id int, opiskeluoikeus_id int, tila smallint, lo_aloituspvm date, oo_aloituspvm date, Tkkoodi varchar(10 CREATE NONCLUSTERED INDEX IX_tkopisk_opiskelija_id ON #tkopisk (opiskelija_id CREATE NONCLUSTERED INDEX IX_tkopisk_opiskeluoikeus_id ON #tkopisk (opiskeluoikeus_id

INSERT into #tkopisk (oppilaitostunnus,hetu,opiskelijaavain,opiskelija_id,opiskeluoikeus_id,opiskeluoi keusavain, oo_aloituspvm SELECT DISTINCT oppilaitostunnus = (SELECT TOP 1 kk FROM #param, hetu = h.henkilotunnus, opiskelijaavain = p.avain, opiskelija_id = p.id, opiskeluoikeus_id = oo.id, opiskeluoikeusavain = oo.avain, oo_aloituspvm = oo.alkamispaivamaara FROM Henkilo h INNER JOIN dbo.opiskelija p ON p.henkiloid = h.id INNER JOIN Opiskeluoikeus oo ON oo.opiskelijaid = p.id INNER JOIN Opiskeluoikeuden_tyyppi ot ON ot.id = oo.op_oikeuden_tyyppiid INNER JOIN Op_oikeuteen_liittyva_tila lt ON lt.opiskeluoikeusid = oo.id INNER JOIN Opiskeluoikeuden_tila kt ON kt.id = lt.op_oikeuden_tilaid WHERE 1 = 1 h.db = @db p.db = @db oo.db = @db lt.db = @db ot.koodi IN ('1' -- tutkinto-oikeus kt.koodi IN ('1' -- aktiivinen cast(cast(@vuosi as int-1 AS varchar + '-08-01' BETWEEN lt.alkamispaivamaara coalesce(lt.paattymispaivamaara,'9999-01-01' -- jolla on läsnäoloja oo.id IN ( SELECT OpiskeluoikeusID FROM Lukukausi_ilmoittautuminen l INNER JOIN Lukukausi_ilm_tila lt ON lt.id = l.lukukausi_ilmoittautumisen_tilaid WHERE l.db = @db lt.koodi IN ('1','2','3' l.alkamispaivamaara BETWEEN cast(cast(@vuosi as int-1 as varchar+'-08-01' cast(cast(@vuosi as int as varchar+'-12-31' -- Viimeinen tilaisuus tulla mukaan perusjoukkoon INSERT into #tkopisk (oppilaitostunnus,hetu,opiskelijaavain,opiskelija_id,opiskeluoikeus_id,opiskeluoi keusavain, oo_aloituspvm SELECT DISTINCT oppilaitostunnus = (SELECT TOP 1 kk FROM #param, hetu = h.henkilotunnus, opiskelijaavain = p.avain, opiskelija_id = p.id, opiskeluoikeus_id = oo.id, opiskeluoikeusavain = oo.avain

, oo_aloituspvm = oo.alkamispaivamaara FROM Henkilo h INNER JOIN dbo.opiskelija p ON p.henkiloid = h.id INNER JOIN Opiskeluoikeus oo ON oo.opiskelijaid = p.id INNER JOIN Opiskeluoikeuden_tyyppi ot ON ot.id = oo.op_oikeuden_tyyppiid INNER JOIN Op_oikeuteen_liittyva_tila lt on lt.opiskeluoikeusid=oo.id INNER JOIN Opiskeluoikeuden_tila kt on kt.id=lt.op_oikeuden_tilaid WHERE 1=1 oo.id NOT IN (SELECT opiskeluoikeus_id FROM #tkopisk -- Ei edellisessä h.db = @db p.db = @db oo.db = @db lt.db = @db ot.koodi IN ('1' -- tutkinto-oikeus kt.koodi IN ('1' -- aktiivinen -- cast(cast(@vuosi as int AS varchar + '-01-01' BETWEEN lt.alkamispaivamaara coalesce(lt.paattymispaivamaara,'9999-01-01' -- jolla on läsnäoloja oo.id IN ( SELECT OpiskeluoikeusID AS ID FROM Lukukausi_ilmoittautuminen l INNER JOIN Lukukausi_ilm_tila lt ON lt.id = l.lukukausi_ilmoittautumisen_tilaid WHERE l.db = @db lt.koodi IN ('1','2','3' l.alkamispaivamaara BETWEEN cast(@vuosi AS varchar + '-01-01' cast(@vuosi AS varchar +'-12-31' -- opiskeluoikeusavain SET tila = 1, oo_aloituspvm = oj.alkamispaivamaara, Tkkoodi = tn.koodi 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 INNER JOIN Opiskeluoikeusjakso oj on oj.opiskeluoikeusid = O.id INNER JOIN Tutkintonimike tn on tn.id = oj.tutkintonimikeid WHERE 1 = 1 o.db = @db

lt.db = @db oj.db = @db ot.koodi IN ('1' -- tutkinto-oikeus kt.koodi IN ('1' -- aktiivinen cast(cast(@vuosi as int-1 AS varchar + '-08-01' BETWEEN oj.alkamispaivamaara coalesce(oj.paattymispaivamaara,'9999-01-01' -- jolla on läsnäoloja o.id IN ( SELECT OpiskeluoikeusID FROM Lukukausi_ilmoittautuminen l INNER JOIN Lukukausi_ilm_tila lt ON lt.id = l.lukukausi_ilmoittautumisen_tilaid WHERE l.db = @db lt.koodi IN ('1','2','3' l.alkamispaivamaara BETWEEN cast(cast(@vuosi as int-1 as varchar+'-08-01' cast(cast(@vuosi as int as varchar+'-12-31' -- opiskeluoikeusavain SET tila = 1, oo_aloituspvm = oj.alkamispaivamaara, Tkkoodi = tn.koodi 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 INNER JOIN Opiskeluoikeusjakso oj on oj.opiskeluoikeusid = O.id INNER JOIN Tutkintonimike tn on tn.id = oj.tutkintonimikeid WHERE 1=1 o.db = @db lt.db = @db oj.db = @db ot.koodi IN ('1' -- tutkinto-oikeus kt.koodi IN ('1' -- aktiivinen -- cast(cast(@vuosi as int AS varchar + '-01-01' BETWEEN oj.alkamispaivamaara coalesce(oj.paattymispaivamaara,'9999-01-01' -- jolla on läsnäoloja o.id IN ( SELECT OpiskeluoikeusID AS ID

FROM Lukukausi_ilmoittautuminen l INNER JOIN Lukukausi_ilm_tila lt ON lt.id = l.lukukausi_ilmoittautumisen_tilaid WHERE l.db = @db lt.koodi IN ('1','2','3' l.alkamispaivamaara BETWEEN cast(@vuosi AS varchar + '-01-01' cast(@vuosi AS varchar +'-12-31' TRUNCATE TABLE #Aloittanut INSERT INTO #Aloittanut (oid, minalkamispaivamaara, LAlkamispaivamaara, OAlkamispaivamaara,opiskelija_id SELECT oo.id, CASE WHEN MIN(L.Alkamispaivamaara >= OO.Alkamispaivamaara THEN MIN(L.Alkamispaivamaara ELSE OO.Alkamispaivamaara END AS minalkamispaivamaara,l.alkamispaivamaara AS LAlkamispaivamaara,oo.Alkamispaivamaara AS OAlkamispaivamaara, o.id FROM dbo.henkilo H JOIN dbo.opiskelija O ON O.HenkiloID = H.ID JOIN dbo.opiskeluoikeus OO ON OO.OpiskelijaID = O.ID JOIN dbo.opiskeluoikeuden_tyyppi ot on ot.id=oo.op_oikeuden_tyyppiid JOIN dbo.lukukausi_ilmoittautuminen L ON L.OpiskeluoikeusID = OO.ID JOIN dbo.lukukausi_ilm_tila LT ON LT.ID = L.Lukukausi_ilmoittautumisen_tilaID WHERE OO.id IN (SELECT opiskeluoikeus_id FROM #tkopisk h.db = @db o.db = @db oo.db = @db L.db = @db LT.Koodi IN ('1' ot.koodi IN ('1' GROUP BY L.Alkamispaivamaara, oo.alkamispaivamaara, oo.id, o.id TRUNCATE TABLE #Min_aloituspvm INSERT INTO #Min_aloituspvm (oid, alk_pvm SELECT oid, MIN(minAlkamispaivamaara As alk_pvm FROM #Aloittanut GROUP BY oid CREATE TABLE #Min_aloituspvm_siirto ( oid int, alk_pvm date

INSERT INTO #Min_aloituspvm_siirto (oid, alk_pvm SELECT MA.oid, CASE WHEN MA.alk_pvm >= OO.Siirtopaivamaara THEN OO.Siirtopaivamaara ELSE MA.alk_pvm END AS alk_pvm FROM #Min_aloituspvm MA JOIN dbo.opiskeluoikeus OO ON MA.oid = OO.id oo.db = @db WHERE OO.Alkamispaivamaara <= cast(@vuosi AS varchar + '-12-31' UPDATE #Min_aloituspvm SET alk_pvm = MT.alk_pvm FROM #Min_aloituspvm_siirto MT WHERE #Min_aloituspvm.oid = MT.oid SET lo_aloituspvm = M.alk_pvm join Opiskeluoikeus o on o.opiskelijaid=t.opiskelija_id join #Min_aloituspvm M ON M.oid = o.id WHERE o.db = @db set T.lo_aloituspvm = T.oo_aloituspvm WHERE T.oo_aloituspvm > T.lo_aloituspvm SELECT DISTINCT @db AS oppilaitos, T.oppilaitostunnus, COALESCE(T.hetu,'' "hetu", T.opiskelijaAvain, T.opiskeluoikeusAvain, @vuosi AS vuosi, T.tila, T.lo_aloituspvm, T.oo_aloituspvm, T.Tkkoodi --WHERE T.tila IS NOT NULL DROP TABLE #tkopisk DROP TABLE #param DROP TABLE #Aloittanut DROP TABLE #Min_aloituspvm

DROP TABLE #Min_aloituspvm_siirto Opiskeluoikeudet YO DECLARE @vuosi varchar(4 = @vuosi_para DECLARE @db varchar(20 = @korkeakoulu Expand source IF OBJECT_ID('tempdb..#param' IS NOT NULL BEGIN TRUNCATE TABLE #param DROP TABLE #param END IF OBJECT_ID('tempdb..#tkopisk' IS NOT NULL BEGIN TRUNCATE TABLE #tkopisk DROP TABLE #tkopisk END CREATE TABLE #param ( vuosi varchar(4, org varchar(30,--kk-lyhenne kk varchar(6 --Yliopisto INSERT INTO #param (vuosi,org,kk SELECT @vuosi as vuosi,@db as org,(select OrganisaatioKoodi FROM Yhteiset.Asetukset.Instanssit WHERE DB = @db as kk CREATE TABLE #Aloittanut ( oid int, minalkamispaivamaara date, LAlkamispaivamaara date, OAlkamispaivamaara date, opiskelija_id int not null CREATE TABLE #Min_aloituspvm ( oid int, alk_pvm date CREATE TABLE #tkopisk (

oppilaitostunnus varchar(6, hetu varchar(11, -- Henkilötunnus opiskelijaavain varchar(100, opiskeluoikeusavain varchar(100, opiskelija_id int, opiskeluoikeus_id int, tila smallint, lo_aloituspvm date, oo_aloituspvm date, Tkkoodi varchar(10 CREATE NONCLUSTERED INDEX IX_tkopisk_opiskelija_id ON #tkopisk (opiskelija_id CREATE NONCLUSTERED INDEX IX_tkopisk_opiskelijaavain ON #tkopisk (opiskelijaavain INSERT into #tkopisk (oppilaitostunnus,hetu,opiskelijaavain,opiskelija_id SELECT oppilaitostunnus = (SELECT TOP 1 kk FROM #param, hetu = h.henkilotunnus, opiskelijaavain = p.avain, opiskelija_id = p.id FROM Henkilo h INNER JOIN dbo.opiskelija p ON p.henkiloid = h.id WHERE 1=1 h.db = @db p.db = @db -- tutkinto-oikeus p.id IN ( SELECT oo.opiskelijaid FROM Opiskeluoikeus oo INNER JOIN Opiskeluoikeuden_tyyppi ot on ot.id = oo.op_oikeuden_tyyppiid INNER JOIN Op_oikeuteen_liittyva_tila lt on lt.opiskeluoikeusid=oo.id INNER JOIN Opiskeluoikeuden_tila kt on kt.id=lt.op_oikeuden_tilaid WHERE 1=1 oo.db = @db lt.db = @db -- tutkinto-tyyppinen opiskeluoikeus ot.koodi IN ('2','4' kt.koodi IN ('1' -- aktiivinen p.id in ( -- ja jolla läsnäoloja SELECT OpiskelijaID FROM Lukukausi_ilmoittautuminen l INNER JOIN Lukukausi_ilm_tila lt on lt.id = l.lukukausi_ilmoittautumisen_tilaid WHERE lt.koodi IN ('1','2','3'

l.db = @db l.alkamispaivamaara BETWEEN cast(cast(@vuosi as int-1 as varchar+'-08-01' cast(cast(@vuosi as int AS varchar+'-12-31' p.id NOT IN (SELECT opiskelija_id FROM #tkopisk -- opiskeluoikeusavain SET opiskeluoikeus_id = o.id, opiskeluoikeusavain = o.avain, tila = 1, oo_aloituspvm = oj.alkamispaivamaara, Tkkoodi = tn.koodi 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 INNER JOIN Opiskeluoikeusjakso oj on oj.opiskeluoikeusid = O.id INNER JOIN Tutkintonimike tn on tn.id = oj.tutkintonimikeid WHERE 1=1 o.db = @db lt.db = @db oj.db = @db -- tutkinto-tyyppinen ot.koodi IN ('2','4' kt.koodi IN ('1' --aktiivinen cast(cast(@vuosi as int-1 AS varchar + '-08-01' BETWEEN oj.alkamispaivamaara coalesce(oj.paattymispaivamaara,'9999-01-01' o.opiskelijaid in ( SELECT OpiskelijaID FROM Lukukausi_ilmoittautuminen l INNER JOIN Lukukausi_ilm_tila lt on lt.id = l.lukukausi_ilmoittautumisen_tilaid WHERE lt.koodi IN ('1','2','3' l.db = @db l.alkamispaivamaara BETWEEN cast(cast(@vuosi as int-1 as varchar+'-08-01' cast(cast(@vuosi as int AS varchar+'-12-31' TRUNCATE TABLE #Aloittanut INSERT INTO #Aloittanut (oid, minalkamispaivamaara, LAlkamispaivamaara, OAlkamispaivamaara,opiskelija_id SELECT oo.id, CASE WHEN MIN(L.Alkamispaivamaara >= OO.Alkamispaivamaara THEN MIN(L.Alkamispaivamaara ELSE OO.Alkamispaivamaara

END AS minalkamispaivamaara,l.alkamispaivamaara AS LAlkamispaivamaara,oo.Alkamispaivamaara AS OAlkamispaivamaara,o.id FROM dbo.henkilo H JOIN dbo.opiskelija O ON O.HenkiloID = H.ID JOIN dbo.opiskeluoikeus OO ON OO.OpiskelijaID = O.ID JOIN dbo.opiskeluoikeuden_tyyppi ot on ot.id=oo.op_oikeuden_tyyppiid LEFT JOIN Lukukausi_ilmoittautuminen L ON L.OpiskelijaID = O.ID JOIN dbo.lukukausi_ilm_tila LT ON LT.ID = L.Lukukausi_ilmoittautumisen_tilaID INNER JOIN Op_oikeuteen_liittyva_tila olt ON olt.opiskeluoikeusid=oo.id INNER JOIN Opiskeluoikeuden_tila kt ON kt.id=olt.op_oikeuden_tilaid WHERE O.id IN (SELECT opiskelija_id FROM #tkopisk h.db = @db o.db = @db oo.db = @db L.db = @db olt.db = @db ot.koodi IN ('2','4' kt.koodi = '1' --aktiivinen LT.Koodi = '1' /* Läsnä */ GROUP BY L.Alkamispaivamaara, oo.alkamispaivamaara, oo.id, o.id INSERT INTO #Min_aloituspvm (oid, alk_pvm SELECT oid, MIN(minAlkamispaivamaara As alk_pvm FROM #Aloittanut GROUP BY oid SET lo_aloituspvm = M.alk_pvm INNER JOIN Opiskeluoikeus o on o.opiskelijaid=t.opiskelija_id INNER JOIN #Min_aloituspvm M ON o.id=m.oid WHERE 1=1 o.db = @db set T.lo_aloituspvm = T.oo_aloituspvm WHERE T.oo_aloituspvm > T.lo_aloituspvm SELECT DISTINCT @db AS oppilaitos, T.oppilaitostunnus, COALESCE(T.hetu,'' "hetu", T.opiskelijaAvain, T.opiskeluoikeusAvain, @vuosi AS vuosi

, T.tila, T.lo_aloituspvm, T.oo_aloituspvm, T.Tkkoodi DROP TABLE #tkopisk DROP TABLE #param DROP TABLE #Aloittanut

DROP TABLE #Min_aloituspvm Alkuun 4. Perusjoukko Pankki (tulos ylläolevien tiedostoista johdettu Kumulatiivinen pankki opintopistekertymä jos on kertyny yli 55 op tai 27 op keväällä aloittaneet. Saldot ja suoritusstatukset "suorittanut 55 ilman pankkia", "suorittanut pankin avulla", "suorittanut 27". Taulu johon kerätään pankkilaskelmat tilastovuosittain per opiskelija: Pankki55 Expand CREATE TABLE [Pankki55]( source [oppilaitos] [varchar](20 NOT NULL, [oppilaitostunnus] [varchar](10 NOT NULL, [hetu] [varchar](11 NOT NULL, [opiskelijaavain] [varchar](100 NOT NULL, [opiskeluoikeusavain] [varchar](100 NULL, [vuosi] [int] NOT NULL, [uutta_pankkiin] [int] NULL CONSTRAINT [DF_Pankki55_uutta_pankkiin] DEFAULT ((0, [pankki_kumu_ennen_55] [int] NULL CONSTRAINT [DF_Pankki55_pankki_kumu_ennen_55] DEFAULT ((0, [op_summa_kun_ote_pankista] [int] NULL CONSTRAINT [DF_Pankki55_op_summa_kun_ote_pankista] DEFAULT ((0, [pankki_saldo_55] [int] NULL CONSTRAINT [DF_Pankki55_pankki_saldo_55] DEFAULT ((0, [suorittanut_27] [smallint] NULL CONSTRAINT [DF_Pankki55_suorittanut_27] DEFAULT ((0, [suorittanut_55_ilman_pankkia] [smallint] NULL CONSTRAINT [DF_Pankki55_suorittanut_55_ilman_pankkia] DEFAULT ((0, [suorittanut_55_pankin_avulla] [smallint] NULL CONSTRAINT [DF_Pankki55_suorittanut_55_pankin_avulla] DEFAULT ((0, [reg_datum] [smalldatetime] NULL CONSTRAINT [DF_Pankki55_reg_datum] DEFAULT (getdate( Pankki AMK DECLARE @vuosi varchar(4 = @vuosi_para DECLARE @db varchar(20 = @korkeakoulu Expand source DELETE FROM [Pankki55] WHERE oppilaitos = @korkeakoulu vuosi = @vuosi

INSERT INTO [Pankki55] ([oppilaitos],[oppilaitostunnus],[hetu],[opiskelijaavain],[opiskeluoikeusavain],[ vuosi], uutta_pankkiin SELECT DISTINCT [oppilaitos],[oppilaitostunnus],[hetu],[opiskelijaavain],[opiskeluoikeusavain],[v uosi], CASE WHEN summa >= 55 THEN summa -55 ELSE 0 END AS uutta_pankkiin FROM [Pisteet55] WHERE oppilaitos = @korkeakoulu vuosi = @vuosi UPDATE P SET P.uutta_pankkiin = (P2.summa - 27, P.suorittanut_27 = 1, P.pankki_saldo_55 = (P2.summa - 27 FROM Pankki55 P JOIN Pisteet55 P2 ON P2.oppilaitostunnus = P.oppilaitostunnus P2.opiskelijaAvain = P.opiskelijaAvain P.opiskeluoikeusAvain = P2.opiskeluoikeusAvain JOIN Lasnaolo55 L ON L.oppilaitostunnus = P.oppilaitostunnus L.opiskelijaAvain = P.opiskelijaAvain L.opiskeluoikeusAvain = P.opiskeluoikeusAvain WHERE P.oppilaitos = @db P.vuosi = @vuosi P2.vuosi = @vuosi L.vuosi = @vuosi L.uusi_opisk_kevat = 1 P2.summa >= 27 UPDATE PUU SET PUU.pankki_kumu_ennen_55 = P.pankki_saldo_55 FROM Pankki55 PUU JOIN Pankki55 P ON P.oppilaitostunnus = PUU.oppilaitostunnus P.opiskelijaAvain = PUU.opiskelijaAvain P.opiskeluoikeusAvain = PUU.opiskeluoikeusAvain JOIN Lasnaolo55 L ON L.oppilaitostunnus = P.oppilaitostunnus L.opiskelijaAvain = P.opiskelijaAvain L.opiskeluoikeusAvain = P.opiskeluoikeusAvain WHERE PUU.oppilaitos = @db P.vuosi = @vuosi PUU.vuosi = cast(@vuosi AS int+1 L.vuosi = @vuosi L.uusi_opisk_kevat = 1 UPDATE P SET P.pankki_kumu_ennen_55 = ( ( SELECT TOP 1 COALESCE(VV.uutta_pankkiin,0 FROM Pankki55 VV WHERE VV.vuosi = P2.vuosi VV.oppilaitos = P2.oppilaitos VV.opiskelijaAvain = P2.opiskelijaAvain VV.opiskeluoikeusAvain = P2.opiskeluoikeusAvain + ( SELECT TOP 1 COALESCE(VV2.pankki_kumu_ennen_55,0 FROM Pankki55 VV2 WHERE VV2.vuosi = P2.vuosi VV2.oppilaitos = P2.oppilaitos VV2.opiskelijaAvain = P2.opiskelijaAvain VV2.opiskeluoikeusAvain = P2.opiskeluoikeusAvain FROM Pankki55 P JOIN Pisteet55 P2 ON P2.oppilaitostunnus = P.oppilaitostunnus P2.opiskelijaAvain = P.opiskelijaAvain P.opiskeluoikeusAvain = P2.opiskeluoikeusAvain

WHERE P.oppilaitos = @db P.vuosi = @vuosi P2.vuosi = cast(cast(@vuosi as int-1 as varchar UPDATE P SET P.pankki_saldo_55 = (P.pankki_kumu_ennen_55 - (55 - (P2.summa, P.op_summa_kun_ote_pankista = COALESCE(P2.summa,0 + (55 - (COALESCE(P2.summa,0, P.suorittanut_55_pankin_avulla = 1, P.suorittanut_55_ilman_pankkia = 0 FROM Pankki55 P JOIN Pisteet55 P2 ON P2.oppilaitostunnus = P.oppilaitostunnus P2.opiskelijaAvain = P.opiskelijaAvain P.opiskeluoikeusAvain = P2.opiskeluoikeusAvain WHERE P.oppilaitos = @db P.vuosi = @vuosi P2.vuosi = @vuosi P2.summa < 55 P2.summa > 0 P.pankki_kumu_ennen_55 >= (55 - (P2.summa UPDATE PUU SET PUU.pankki_kumu_ennen_55 = P.pankki_saldo_55 FROM Pankki55 PUU JOIN Pankki55 P ON P.oppilaitostunnus = PUU.oppilaitostunnus P.opiskelijaAvain = PUU.opiskelijaAvain P.opiskeluoikeusAvain = PUU.opiskeluoikeusAvain WHERE PUU.oppilaitos = @db P.vuosi = @vuosi PUU.vuosi = cast(@vuosi AS int+1 UPDATE P SET P.suorittanut_55_ilman_pankkia = 1, P.suorittanut_55_pankin_avulla = 0, P.pankki_saldo_55 = P.uutta_pankkiin + P.pankki_kumu_ennen_55 FROM Pankki55 P JOIN Pisteet55 P2 ON P2.oppilaitostunnus = P.oppilaitostunnus P2.opiskelijaAvain = P.opiskelijaAvain P.opiskeluoikeusAvain = P2.opiskeluoikeusAvain WHERE P.oppilaitos = @db P.vuosi = @vuosi P2.vuosi = @vuosi P2.summa >= 55 UPDATE PUU SET PUU.pankki_kumu_ennen_55 = P.pankki_saldo_55 FROM Pankki55 PUU JOIN Pankki55 P ON P.oppilaitostunnus = PUU.oppilaitostunnus P.opiskelijaAvain = PUU.opiskelijaAvain P.opiskeluoikeusAvain = PUU.opiskeluoikeusAvain

WHERE PUU.oppilaitos = @db P.vuosi = @vuosi PUU.vuosi = cast(@vuosi AS int+1 Pankki YO DECLARE @vuosi varchar(4 = @vuosi_para DECLARE @db varchar(20 = @korkeakoulu Expand source DELETE FROM [Pankki55] WHERE oppilaitos = @korkeakoulu vuosi = @vuosi INSERT INTO [Pankki55] ([oppilaitos],[oppilaitostunnus],[hetu],[opiskelijaavain],[opiskeluoikeusavain],[ vuosi], uutta_pankkiin SELECT DISTINCT [oppilaitos],[oppilaitostunnus],[hetu],[opiskelijaavain],[opiskeluoikeusavain],[v uosi], CASE WHEN summa >= 55 THEN summa -55 ELSE 0 END AS uutta_pankkiin FROM [Pisteet55] WHERE oppilaitos = @korkeakoulu vuosi = @vuosi UPDATE P SET P.uutta_pankkiin = (P2.summa - 27, P.suorittanut_27 = 1, P.pankki_saldo_55 = (P2.summa - 27 FROM Pankki55 P JOIN Pisteet55 P2 ON P2.oppilaitostunnus = P.oppilaitostunnus P2.opiskelijaAvain = P.opiskelijaAvain JOIN Lasnaolo55 L ON L.oppilaitostunnus = P.oppilaitostunnus L.opiskelijaAvain = P.opiskelijaAvain WHERE P.oppilaitos = @db P.vuosi = @vuosi P2.vuosi = @vuosi L.vuosi = @vuosi L.uusi_opisk_kevat = 1 P2.summa >= 27 UPDATE PUU SET PUU.pankki_kumu_ennen_55 = P.pankki_saldo_55 FROM Pankki55 PUU JOIN Pankki55 P ON P.oppilaitostunnus = PUU.oppilaitostunnus P.opiskelijaAvain = PUU.opiskelijaAvain JOIN Lasnaolo55 L ON L.oppilaitostunnus = P.oppilaitostunnus L.opiskelijaAvain = P.opiskelijaAvain WHERE PUU.oppilaitos = @db P.vuosi = @vuosi PUU.vuosi = cast(@vuosi AS int+1 L.vuosi = @vuosi L.uusi_opisk_kevat = 1 UPDATE P SET P.pankki_kumu_ennen_55 = ( ( SELECT TOP 1 COALESCE(VV.uutta_pankkiin,0 FROM Pankki55 VV WHERE VV.vuosi = P2.vuosi VV.oppilaitos = P2.oppilaitos VV.opiskelijaAvain = P2.opiskelijaAvain + ( SELECT TOP 1 COALESCE(VV2.pankki_kumu_ennen_55,0 FROM Pankki55 VV2 WHERE VV2.vuosi = P2.vuosi VV2.oppilaitos = P2.oppilaitos

VV2.opiskelijaAvain = P2.opiskelijaAvain FROM Pankki55 P JOIN Pisteet55 P2 ON P2.oppilaitostunnus = P.oppilaitostunnus P2.opiskelijaAvain = P.opiskelijaAvain WHERE P.oppilaitos = @db P.vuosi = @vuosi P2.vuosi = cast(cast(@vuosi as int-1 as varchar UPDATE P SET P.pankki_saldo_55 = (P.pankki_kumu_ennen_55 - (55 - (P2.summa, P.op_summa_kun_ote_pankista = COALESCE(P2.summa,0 + (55 - (COALESCE(P2.summa,0, P.suorittanut_55_pankin_avulla = 1, P.suorittanut_55_ilman_pankkia = 0 FROM Pankki55 P JOIN Pisteet55 P2 ON P2.oppilaitostunnus = P.oppilaitostunnus P2.opiskelijaAvain = P.opiskelijaAvain WHERE P.oppilaitos = @db P.vuosi = @vuosi P2.vuosi = @vuosi P2.summa < 55 P2.summa > 0 P.pankki_kumu_ennen_55 >= (55 - (P2.summa UPDATE PUU SET PUU.pankki_kumu_ennen_55 = P.pankki_saldo_55 FROM Pankki55 PUU JOIN Pankki55 P ON P.oppilaitostunnus = PUU.oppilaitostunnus P.opiskelijaAvain = PUU.opiskelijaAvain WHERE PUU.oppilaitos = @db P.vuosi = @vuosi PUU.vuosi = cast(@vuosi AS int+1 UPDATE P SET P.suorittanut_55_ilman_pankkia = 1, P.suorittanut_55_pankin_avulla = 0, P.pankki_saldo_55 = P.uutta_pankkiin + P.pankki_kumu_ennen_55 FROM Pankki55 P JOIN Pisteet55 P2 ON P2.oppilaitostunnus = P.oppilaitostunnus P2.opiskelijaAvain = P.opiskelijaAvain WHERE P.oppilaitos = @db P.vuosi = @vuosi P2.vuosi = @vuosi P2.summa >= 55 UPDATE PUU SET PUU.pankki_kumu_ennen_55 = P.pankki_saldo_55 FROM Pankki55 PUU JOIN Pankki55 P ON P.oppilaitostunnus = PUU.oppilaitostunnus P.opiskelijaAvain = PUU.opiskelijaAvain WHERE PUU.oppilaitos = @db P.vuosi = @vuosi PUU.vuosi = cast(@vuosi AS int+1

Alkuun 5. Perusjoukko Opiskelijat Opiskelija55 Expand CREATE TABLE [Opiskelija55]( source [oppilaitos] [varchar](20 NOT NULL, [oppilaitostunnus] [varchar](10 NOT NULL, [hetu] [varchar](11 NOT NULL, [opiskelijaavain] [varchar](100 NOT NULL, [Sukupuoli] [smallint] NULL, [reg_datum] [smalldatetime] NULL CONSTRAINT [DF_Opiskelija55_reg_datum] DEFAULT (getdate(, CONSTRAINT [PK_Opiskelija55] PRIMARY KEY CLUSTERED ( [oppilaitostunnus] ASC, [hetu] ASC, [opiskelijaavain] ASC WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON ON [PRIMARY] Kerätään yhteen ylläoleviin poimitut. Lisätiedoksi vielä opiskelijan sukupuoli. Opiskelijat AMK DELETE FROM [Opiskelija55] WHERE oppilaitos = @kk INSERT INTO [Opiskelija55] ([oppilaitos],[oppilaitostunnus],[hetu],[opiskelijaavain],[sukupuoli] Expand source SELECT DISTINCT [oppilaitos],[oppilaitostunnus],[hetu],[opiskelijaavain], S.Koodi AS sukupuoli FROM Lasnaolo55 L JOIN Opiskelija O ON O.Avain = L.opiskelijaAvain JOIN Henkilo H ON O.henkiloid = H.id JOIN Sukupuoli S ON H.SukupuoliID = S.id WHERE L.oppilaitos = @kk O.db = @kk H.db = @kk O.Avain NOT IN (SELECT OO.opiskelijaAvain FROM Opiskelija55 OO WHERE OO.oppilaitos = @kk

Opiskelijat YO DELETE FROM [Opiskelija55] WHERE oppilaitos = @kk INSERT INTO [Opiskelija55] ([oppilaitos],[oppilaitostunnus],[hetu],[opiskelijaavain],[sukupuoli] Expand source SELECT DISTINCT [oppilaitos],[oppilaitostunnus],[hetu],[opiskelijaavain], S.Koodi AS sukupuoli FROM Lasnaolo55 L JOIN Opiskelija O ON O.Avain = L.opiskelijaAvain JOIN Henkilo H ON O.henkiloid = H.id JOIN Sukupuoli S ON H.SukupuoliID = S.id WHERE L.oppilaitos = @kk O.db = @kk H.db = @kk O.Avain NOT IN (SELECT OO.opiskelijaAvain FROM Opiskelija55 OO WHERE OO.oppilaitos = @kk Alkuun Esimerkkidataa per perusjoukko (taulu ja pankkilaskelma opiskelijan aikajanana Pisteet55 opiskelijaavain opiskeluoikeusavain vuosi edellinen_lv_syys_pisteet edellinen_lv_kevat_pisteet summa 123456789 334444 2012 0 30 30 123456789 334444 2013 26 41 67 123456789 334444 2014 34 24 58 123456789 334466 2015 18 30 48 123456789 334466 2016 33 5 38 Keltainen väri: Opiskelija ensimmäisenä keväänä (2012 suorittanut 30 op, josta 3 op yli 27 op kertyy pankkiin seuraavalle vuodelle (2013. Seuraavalle vuodelle (2013 kumulativinen pankkisaldo 3. Sininen väri: Seuraavana vuonna (2013 edellisen lukuvuoden (2012-13 opintopisteet 67 op, eli opiskelija on suorittanut >= 55 op, kertyy 12 op uusia pisteitä pankkiin. Ei tarvita pankkia. Suorittanut_55_ilman_pankkia = 1. Kumulativisena saldona seuraavalle vuodelle (2014 on nyt 15. Vihreä väri: Seuraavana vuonna (2014 (2013-14 suorittanut 58 op. Ei tarvita vieläkään pankkia. Suorittanut_55_ilman_pankkia =1. Tulee 3 op uutta pistettä pankkin. Kumulatiivinen saldo seuraavalle (2015 on 18 op. Punainen väri: Seuraavana (2015 edelliseltä (2014-15 kertynyt nyt vain 48 op, eli on alle 55 op ja nyt otetaan pankista jotta saadaan 55 op ja saldoksi jää 11. Suorittanut_55_pankin_avulla = 1 Alkuun Pankki55 opiskelijaavain opiskeluoikeusavain vuosi uutta_pankkiin pankki_kumu_ennen_55 op_summa_kun_ote_pankista pankki_saldo_55 suorittanut_27 123456789 334444 2012 3 0 0 3 1 123456789 334444 2013 12 3 0 15 0 123456789 334466 2014 3 15 0 18 0

123456789 334466 2015 0 18 55 11 0 Opiskeluoikeus55 opiskelijaavain opiskeluoikeusavain vuosi tila lo_aloituspvm oo_aloituspvm Tkkoodi 123456789 2011 1.1.2012 123456789 334444 2012 1 1.1.2012 1.8.2011 655502 123456789 334444 2013 1 1.8.2012 1.8.2012 655502 123456789 334466 2014 1 1.8.2012 1.8.2012 751502 123456789 334466 2015 1 1.8.2012 1.8.2012 751502 Lasnaolo55 opiskelijaavain opiskeluoikeusavain vuosi syys_olo kevat_olo edellinen_syys_olo uusi_opisk_kevat uusi_opisk 123456789 2011 2 0 0 0 0 123456789 334444 2012 1 1 2 1 1 123456789 334444 2013 1 1 1 0 0 123456789 334466 2014 1 1 1 0 0 123456789 334466 2015 1 1 1 0 0 Alkuun Lyhyt kuvaus laskentaprosessista. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Lasketaan pisteet 2006-2016 Haetaan läsnäolotiedot 2006-2016 Haetaan opiskeluoikeustiedot 2006-2016 Poimitaan keväällä aloittaneet Poimitaan kaikki tilastovuoden uudet opiskelijat Alustetaan pankkitiedot Lasketaan kevällä aloittaneiden >= 27 op keränneet Lasketaan kumulatiivinen pankkitili Pankkisaldot kumulatiivisen laskennan jälkeen Kerätään yhteen opiskelijat Loppuraportti ylläolevasta kerätystä per tilastovuosi Lopputulos Kerätään yhteen tiedot per tilastovuosi ja viedään extra-vipuseen tiedot. Taulu jonne tulokset kerätään

ViisViisTulosTaulu CREATE TABLE [ViisViisLaskentaTaulukko]( [oppilaitos] [varchar](20 NULL, [oppilaitostunnus] [varchar](10 NULL, [vuosi] [int] NULL, [hetu] [varchar](11 NULL, [olok] [smallint] NULL, [olos] [smallint] NULL, [syys] [int] NULL, [kevat] [int] NULL, [summa] [int] NULL, [tkoodi] [varchar](6 NULL, [lo_aloituspvm] [date] NULL, [oo_aloituspvm] [date] NULL, [opiskeluoikeus_id] [int] NULL, [uutta_pankkiin] [int] NULL, [pankki_kumu_ennen_55] [int] NULL, [op_summa_kun_ote_pankista] [int] NULL, [pankki_saldo_55] [int] NULL, [suorittanut_27] [smallint] NULL, [suorittanut_55_ilman_pankkia] [smallint] NULL, [suorittanut_55_pankin_avulla] [smallint] NULL, [uusi_opisk_kevat] [smallint] NULL, [uusi_opisk] [smallint] NULL, [opiskelijaavain] [varchar](100 NULL, [opiskeluoikeusavain] [varchar](100 NULL, [sukupuoli] [smallint] NULL, [edellinen_syysolo] [smallint] NULL, [reg_datum] [smalldatetime] NULL CONSTRAINT [DF_ViisViisLaskentaTaulukko_reg_datum] DEFAULT (getdate( Expand source Poimitaan tiedot korkeakouluittain (@korkeakoulu: AMK: AMK Lopputulos DELETE FROM ViisViisLaskentaTaulukko WHERE oppilaitos = @korkeakoulu INSERT INTO [dbo].[viisviislaskentataulukko] ([oppilaitos],[oppilaitostunnus],[vuosi],[hetu],[olok],[olos],[syys],[kevat],[summa],[tkoodi],[lo_aloituspvm],[oo_aloituspvm] Expand source

,[uutta_pankkiin],[pankki_kumu_ennen_55],[op_summa_kun_ote_pankista],[pankki_saldo_55],[suorittanut_27],[suorittanut_55_ilman_pankkia],[suorittanut_55_pankin_avulla],[uusi_opisk_kevat],[uusi_opisk],[opiskelijaavain],[opiskeluoikeusavain],[sukupuoli],[edellinen_syysolo] SELECT DISTINCT O.[oppilaitos], O.[oppilaitostunnus], OK.[vuosi], O.hetu, L.[kevat_olo], L.[syys_olo], P.[edellinen_lv_syys_pisteet], P.[edellinen_lv_kevat_pisteet], P.[summa], OK.[tkkoodi], OK.[lo_aloituspvm], OK.[oo_aloituspvm], PK.[uutta_pankkiin], PK.[pankki_kumu_ennen_55], PK.[op_summa_kun_ote_pankista], PK.[pankki_saldo_55], PK.[suorittanut_27], PK.[suorittanut_55_ilman_pankkia], PK.[suorittanut_55_pankin_avulla], L.[uusi_opisk_kevat], L.[uusi_opisk], O.[opiskelijaAvain], Ok.opiskeluoikeusAvain, O.[sukupuoli], L.[edellinen_syys_olo] FROM [Opiskelija55] O INNER JOIN Opiskeluoikeus55 OK ON OK.opiskelijaAvain = O.opiskelijaAvain OK.oppilaitostunnus = O.oppilaitostunnus LEFT JOIN Lasnaolo55 L ON L.vuosi = OK.vuosi L.oppilaitostunnus = OK.oppilaitostunnus L.opiskelijaAvain = OK.opiskelijaAvain L.opiskeluoikeusAvain = OK.opiskeluoikeusAvain LEFT JOIN Pisteet55 P ON P.vuosi = L.vuosi P.oppilaitostunnus = L.oppilaitostunnus

P.opiskelijaAvain = L.opiskelijaAvain P.opiskeluoikeusAvain = L.opiskeluoikeusAvain LEFT JOIN Pankki55 PK ON PK.vuosi = P.vuosi PK.oppilaitostunnus = P.oppilaitostunnus PK.opiskelijaAvain = P.opiskelijaAvain PK.opiskeluoikeusAvain = P.opiskeluoikeusAvain

WHERE O.oppilaitos = @korkeakoulu OK.tila = 1 Alkuun YO: YO Lopputulos DELETE FROM ViisViisLaskentaTaulukko WHERE oppilaitos = @korkeakoulu INSERT INTO [dbo].[viisviislaskentataulukko] ([oppilaitos],[oppilaitostunnus],[vuosi],[hetu],[olok],[olos],[syys],[kevat],[summa],[tkoodi],[lo_aloituspvm],[oo_aloituspvm],[uutta_pankkiin],[pankki_kumu_ennen_55],[op_summa_kun_ote_pankista],[pankki_saldo_55],[suorittanut_27],[suorittanut_55_ilman_pankkia],[suorittanut_55_pankin_avulla],[uusi_opisk_kevat],[uusi_opisk],[opiskelijaavain],[opiskeluoikeusavain],[sukupuoli],[edellinen_syysolo] SELECT DISTINCT O.[oppilaitos], O.[oppilaitostunnus], OK.[vuosi], O.hetu, L.[kevat_olo], L.[syys_olo], P.[edellinen_lv_syys_pisteet], P.[edellinen_lv_kevat_pisteet], P.[summa], OK.[tkkoodi], OK.[lo_aloituspvm], OK.[oo_aloituspvm], PK.[uutta_pankkiin], PK.[pankki_kumu_ennen_55], PK.[op_summa_kun_ote_pankista], PK.[pankki_saldo_55], PK.[suorittanut_27], PK.[suorittanut_55_ilman_pankkia] Expand source

, PK.[suorittanut_55_pankin_avulla], L.[uusi_opisk_kevat], L.[uusi_opisk], O.[opiskelijaAvain], Ok.opiskeluoikeusAvain, O.[sukupuoli], L.[edellinen_syys_olo] FROM [Opiskelija55] O INNER JOIN Opiskeluoikeus55 OK ON OK.opiskelijaAvain = O.opiskelijaAvain OK.oppilaitostunnus = O.oppilaitostunnus LEFT JOIN Lasnaolo55 L ON L.vuosi = OK.vuosi L.oppilaitostunnus = OK.oppilaitostunnus L.opiskelijaAvain = OK.opiskelijaAvain L.opiskeluoikeusAvain = OK.opiskeluoikeusAvain -- LEFT JOIN Pisteet55 P ON P.vuosi = L.vuosi P.oppilaitostunnus = L.oppilaitostunnus P.opiskelijaAvain = L.opiskelijaAvain P.opiskeluoikeusAvain = L.opiskeluoikeusAvain -- LEFT JOIN Pankki55 PK ON PK.vuosi = P.vuosi PK.oppilaitostunnus = P.oppilaitostunnus PK.opiskelijaAvain = P.opiskelijaAvain PK.opiskeluoikeusAvain = P.opiskeluoikeusAvain -- WHERE O.oppilaitos = @korkeakoulu

OK.tila = 1 Alkuun Lopputulostiedoista muodostetaan korkeakoulukohtaiset tarkistustiedostot VirtaSFTP-palvelimelle. Tarkistustiedostot Tiedot/sarakkeet csv-tiedostossa: oppilaitos;oppilaitostunnus;vuosi;hetu;sukupuoli;edellinen_syysolo;olok;olos;syys;kevat;summa;uutta_pankkiin;pankki_kumu_ennen _55;op_summa_kun_ote_pankista;pankki_saldo_55;suorittanut_27;suorittanut_55_ilman_pankkia;suorittanut_55_pankin_avulla;uusi_ opisk_kevat;uusi_opisk;tkoodi;lo_aloituspvm;oo_aloituspvm;opiskelijaavain;opiskeluoikeusavain oppilaitos : Lyhenne, korkeakoulun tunniste Virrassa oppilaitostunnus : Organisaatiokoodi (5 numeroinen vuosi : Tilastovuosi hetu : Opiskelijan henkilötunnus tai syntymäaika sukupuoli : Opiskelijan sukupuoli (1=mies, 2=nainen edellinen_syysolo : Tilastovuodesta katsottuna edellisen syyslukukauden tieto 1=läsnä, 2=poissa, 0=ei kirjoilla/tieto puuttuu olok : kevätlukukauden tieto 1=läsnä, 2=poissa, 0=ei kirjoilla/tieto puuttuu olos : tilastovuoden syyslukukauden tieto 1=läsnä, 2=poissa, 0=ei kirjoilla/tieto puuttuu syys : edellisen syyslukukauden opintopisteet (kokonaisluku 1.8-31.12.tilastovuosi-1 kevat : edellisen kevätlukukauden opintopisteet (kokonaisluku 1.1-31.7.tilastovuosi summa : syys + kevat pisteet yhteensä 1.8.tilastovuosi-1-31.7.tilastovuosi uutta_ pankkiin : tilastovuonna pankkiin seuraavalle vuodelle pankki_kumu_ennen_55 : pankin kumulatiivinen kertymä ennen 55 laskentaa tilastovuonna op_summa_kun_ote_pankista : opintopistesumma kun on käytetty pankkia pankki_saldo_55 : pankkisaldo suorittanut_27 : Suorittanut >= 27 op suorittanut_55_ilman_pankkia : Suorittanut >= 55 op ilman pankkia suorittanut_55_pankin_avulla : Suorittanut 55 op pankin avulla uusi_opisk_kevat : Keväällä aloittanut uusi opiskelija uusi_opisk : Vuoden uusi opiskelija tkoodi : Tilastokeskuksen 6-numeroinen koulutuskoodi lo_aloituspvm : Ensimmäinen läsnäolopäivämäärä. Laskettu ensimmäisestä läsnäolotiedosta tarvitaan uusi_opisk -tietoa päätellessä oo_aloituspvm : Opiskeluoikeuden alkamispäivämäärä. Tilastovuoden edellisen lukuvuoden aktiivinen opiskeluoikeus opiskelijaavain : Opiskelijan yksilöivä avain opiskeluoikeusavain : Opiskeluoikeuden yksilöivä avain Alkuun csv-tiedostoja voi Excelissä esim. COUNTIF( tai SUMIF( funktioita käyttämällä tehdä tarkistuslaskelmia, opiskelijakohtaisesti tarkistaa tietoja opiskelijaavain, opiskeluoikeusavaimien tai hetun mukaan.

Esimerkkitapauksia Esim1. Suorittanut 55 pankin avulla Opiskelijalla on suorittanut edellisellä lukuvuodella 50 op ja pankissa on 5 op. summa = 50 (edellisen lukuvuoden pisteet pankki_kumu_ennen_55 = 5 (pankkiin kertyneet op aiemilta vuosilta op_summa_kun_ote_pankista = 55 pankki_saldo_55 = 0 (saldo jäljellä kun käytetty pankkia => suorittanut_55_pankin_avulla = 1 Esim2. Pankki tyhjenee jos pisteet eivät riitä saavuttamaan 55 op summa = 35 (edellisen lukuvuoden pisteet pankki_kumu_ennen_55 = 5 (pankkiin kertyneet aiemilta vuosilta pankki_saldo_55 = 0 (saldo sen jälkeen kun käytetty pankkia => suorittanut_55_ilman_pankkia=0 => suorittanut_55_pankin_avulla=0 Esim3. Suorittanut 55 op ilman pankkia Opiskelijalle kertynyt yli 55 op. summa = 59 (edellisen lukuvuoden pisteet uutta_pankkiin = 4 pankki_kumu_ennen_55 = 5 (pankkiin kertyneet op aiemilta vuosilta pankki_saldo_55 = 9 (uutta_pankkiin + pankki_kumu_ennen_55 => suorittanut_55_ilman_pankkia = 1 Esim4. Keväällä aloittanut suorittanut 27 op summa = 30 (edellisen lukuvuoden pisteet, eli ainoastaan keväältä uutta_pankkiin = 3

pankki_saldo_55 = 3 => suorittanut_27 = 1 Alkuun Mittarit Extravipusen raportissa 1. Vähintään 55 opintopistettä suorittaneiden määrä (summa mittareista 3., 4. ja 5.. 2. Vähintään 55 opintopistettä suorittaneiden määrä, rahoitusmalli (sama kuin 1., paitsi että keväällä aloittaneiden määrä jaettuna kahdella 3. Keväällä aloittaneista vähintään 27 op:ta suorittaneet 4. Suorittanut 55 op ilman pankkia 5. Suorittanut 55 op pankin kanssa 6. Läsnäolleiden määrä (läsnäolotieto 1 joko syksyllä tai keväällä (esim. s2014 tai k2015. 7. 55 op suorittaneiden osuus (mittari 1. jaettuna mittarilla 6. Raportin muuttujat: a. lukuvuosi, esim 2014/2015 b. korkeakoulu c. tutkintokoodi ja siitä johdettuna OKM:n ohjauksen alat ja ISCED-luokitus d. sukupuoli e. aika aloittamisesta (tilastolukuvuosi miinus aloittamislukuvuosi, asteikko 0,1...6,7 ja 8 tai enemmän f. uutena keväällä aloittanut Alkuun