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. Lasketaan pisteet 2006 - 2016
  2. Haetaan läsnäolotiedot 2006 - 2016
  3. Haetaan opiskeluoikeustiedot 2006 - 2016
  4. Poimitaan keväällä aloittaneet
  5. Poimitaan kaikki tilastovuoden uudet opiskelijat
  6. Alustetaan pankkitiedot
  7. Lasketaan kevällä aloittaneiden >= 27 op keränneet
  8. Lasketaan kumulatiivinen pankkitili
  9. Pankkisaldot kumulatiivisen laskennan jälkeen
  10. Kerätään yhteen opiskelijat
  11. 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 suoritukselle 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ä


    Opintopisteiden hyväksilukupvm näkymä
    CREATE VIEW [Opintosuoritus_pvm]
    
    AS
    
    
    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    Opintosuoritus OS 
                JOIN Opintosuorituksen_laji OL ON OL.id = OS.Opintosuorituksen_lajiID
                LEFT JOIN Opsuorituksen_hyvaksiluku OH ON OH.OpintosuoritusID = OS.id
    WHERE    OL.Koodi = '2'
    
    


    Taulu johon kerätään opintopisteet lukukausittain (edellinen syys ja kevät) tilastovuosittain per opiskelija:

    Pisteet55
    CREATE TABLE [Pisteet55](
        [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
            
    
    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,opiskeluoikeus_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
    
    AND         h.db = @db
    AND         p.db = @db
    AND        oo.db = @db
    AND     lt.db = @db
                
    AND     ot.Koodi IN ('1') -- tutkinto-oikeus
    
    AND     kt.Koodi IN ('1') --aktiivinen    
    
    AND p.ID IN (
    
        SELECT     OS.OpiskelijaID
        FROM     Opintosuoritus_pvm OS
        WHERE     1 = 1
        AND     os.db = @db
    
        AND OS.suorpvm    BETWEEN cast(cast(@vuosi as int)-1 AS varchar)+'-08-01' AND cast(@vuosi AS varchar) +'-07-31'
        
        AND    OS.suorpvm >= OO.Alkamispaivamaara
    
    )
    AND oo.ID NOT IN (SELECT opiskeluoikeus_id FROM #tkopisk)
    AND oo.ID NOT IN (SELECT OOP.id FROM Opiskeluoikeus OOP WHERE OOP.Paattymispaivamaara <= cast(cast(@vuosi as int)-1 AS varchar)+'-08-01' AND OOP.db = @db )
    
    
    
    INSERT into #tkopisk (oppilaitostunnus,hetu,opiskelijaavain,opiskelija_id,opiskeluoikeusavain,opiskeluoikeus_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
    
    AND         h.db = @db
    AND         p.db = @db
    AND        oo.db = @db
    AND     lt.db = @db
                
    AND     ot.Koodi IN ('1') -- tutkinto-oikeus
    
    AND     kt.Koodi IN ('1') --aktiivinen    
    AND        cast(cast(@vuosi as int)-1 AS varchar) + '-08-01' BETWEEN lt.Alkamispaivamaara AND coalesce(lt.Paattymispaivamaara,'9999-01-01')
    
    AND p.ID NOT IN (
    
        SELECT     OS.OpiskelijaID
        FROM     Opintosuoritus_pvm OS
        WHERE     1 = 1
        AND     os.db = @db
    
        AND OS.suorpvm    BETWEEN cast(cast(@vuosi as int)-1 AS varchar)+'-08-01' AND cast(@vuosi AS varchar) +'-07-31'
        
        -- Tässä lisäys Opiskeluoikeuden alkamisen jälkeen
        AND    OS.suorpvm >= OO.Alkamispaivamaara
    
    )
    AND oo.ID NOT IN (SELECT opiskeluoikeus_id FROM #tkopisk)
    AND oo.ID NOT IN (SELECT OOP.id FROM Opiskeluoikeus OOP WHERE OOP.Paattymispaivamaara <= cast(cast(@vuosi as int)-1 AS varchar)+'-08-01' AND 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' AND 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' AND 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    
        AND s.db    = @db
        AND OS.db    = @db
                 
                                 
        AND s.ID NOT IN (SELECT ss.OpintosuoritusID FROM Op_suor_sisaltyvyys ss WHERE ss.db = @db    )    
    
    
    UPDATE  T
    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
    )
    FROM #tkopisk T
    WHERE opes IS NULL
    
    
    UPDATE  T
    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
    )
    FROM #tkopisk T
    WHERE opek IS NULL
    
    
    
    UPDATE  T
    set opes=0
    FROM #tkopisk T
    WHERE opes IS NULL
    
    UPDATE  T
    set opek=0
    FROM #tkopisk T
    WHERE opek IS NULL
    
    
    --  opiskeluoikeusavain
    UPDATE  T
    SET     opiskeluoikeus_id = o.ID
        ,     opiskeluoikeusavain = o.avain    
    FROM #tkopisk 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
        INNER JOIN Opiskeluoikeusjakso oj on oj.OpiskeluoikeusID = O.id
    WHERE     1=1
    AND        o.db     = @db
    AND        lt.db     = @db
    AND        oj.db     = @db
    
                            -- tutkinto-tyyppinen
    AND     ot.Koodi IN ('1')
    AND     kt.Koodi IN ('1') --aktiivinen
    AND        cast(cast(@vuosi as int)-1 AS varchar) + '-08-01' BETWEEN oj.Alkamispaivamaara AND 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
        
    FROM #tkopisk T
    
    
    
    DROP TABLE #tkopisk    
    DROP TABLE #pisteet    
    DROP TABLE #param
    
    
    
    
    
    YO Opintopisteet per lukuvuosi
    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,
        
        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
    AND h.db = @db
    AND p.db = @db
                            -- tutkinto-oikeus
    AND 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
            AND     oo.db    = @db
            AND     lt.db    = @db
                    -- tutkinto-tyyppinen opiskeluoikeus
            AND ot.Koodi IN ('2','4')    
            AND kt.Koodi IN ('1')     --    aktiivinen        
        )    
    
    AND p.ID in (
    
        SELECT     OS.OpiskelijaID
        FROM     Opintosuoritus_pvm OS
                    JOIN Opiskeluoikeus OO ON OO.OpiskelijaID = OS.OpiskelijaID
        WHERE     1 = 1
        AND     os.db = @db
    
        AND OS.suorpvm    BETWEEN cast(cast(@vuosi as int)-1 AS varchar)+'-08-01' AND cast(@vuosi AS varchar) +'-07-31'
    
        AND    OS.suorpvm >= oo.Alkamispaivamaara    
    )
    AND 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
    AND h.db = @db
    AND p.db = @db
                            -- tutkinto-oikeus
    AND 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
            AND     oo.db    = @db
            AND     lt.db    = @db
                    -- tutkinto-tyyppinen opiskeluoikeus
            AND ot.Koodi IN ('2','4')    
            AND kt.Koodi IN ('1')     --    aktiivinen        
            AND        cast(cast(@vuosi as int)-1 AS varchar) + '-08-01' BETWEEN lt.Alkamispaivamaara AND coalesce(lt.Paattymispaivamaara,'9999-01-01')
            
            AND oo.ID NOT IN (SELECT OOP.id FROM Opiskeluoikeus OOP WHERE OOP.Paattymispaivamaara <= cast(cast(@vuosi as int)-1 AS varchar)+'-08-01' AND OOP.db = @db )
    
        )    
    
    AND p.ID NOT IN (
    
        SELECT     OS.OpiskelijaID
        FROM     Opintosuoritus_pvm OS
                    JOIN Opiskeluoikeus OO ON OO.OpiskelijaID = OS.OpiskelijaID
        WHERE     1 = 1
        AND     os.db = @db
    
        AND OS.suorpvm    BETWEEN cast(cast(@vuosi as int)-1 AS varchar)+'-08-01' AND cast(@vuosi AS varchar) +'-07-31'
    
                
        AND    OS.suorpvm >= oo.Alkamispaivamaara
    
        
    )
    AND 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' AND 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' AND 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    
        AND s.db    = @db
        AND OS.db    = @db
                 
                                 
        AND s.ID NOT IN (SELECT ss.OpintosuoritusID FROM Op_suor_sisaltyvyys ss WHERE ss.db = @db    )    
    
    
    UPDATE  T
    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
    )
    FROM #tkopisk T
    WHERE opes IS NULL
    
    
    UPDATE  T
    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
    )
    FROM #tkopisk T
    WHERE opek IS NULL
    
    
    
    UPDATE  T
    set opes=0
    FROM #tkopisk T
    WHERE opes IS NULL
    
    UPDATE  T
    set opek=0
    FROM #tkopisk T
    WHERE opek IS NULL
    
    
    --  opiskeluoikeusavain
    UPDATE  T
    SET     opiskeluoikeus_id = o.ID
        ,     opiskeluoikeusavain = o.avain    
    FROM #tkopisk 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
        INNER JOIN Opiskeluoikeusjakso oj on oj.OpiskeluoikeusID = O.id
    WHERE     1=1
    AND        o.db     = @db
    AND        lt.db     = @db
    AND        oj.db     = @db
    
                            -- tutkinto-tyyppinen
    AND     ot.Koodi IN ('2','4')
    AND     kt.Koodi IN ('1') --aktiivinen
    AND        cast(cast(@vuosi as int)-1 AS varchar) + '-08-01' BETWEEN oj.Alkamispaivamaara AND 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
        
    FROM #tkopisk T
    
    
    
    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     1.8.TILASTOVUOSI-1 - 31.12.TILASTOVUOSI-1 (edellinen_syys_olo)

    kevät     1.1.TILASTOVUOSI- 31.7.TILASTOVUOSI(kevat_olo)

    syys     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
    CREATE TABLE [Lasnaolo55](
        [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    
        
    
    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,opiskeluoikeusavain)
    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        
    AND             h.db     = @db
    AND             p.db     = @db
    AND            oo.db     = @db
    AND         lt.db    = @db
                
    AND ot.Koodi IN ('1') -- tutkinto-oikeus
    AND kt.Koodi IN ('1') -- aktiivinen
    
    AND        cast(cast(@vuosi as int)-1 AS varchar) + '-08-01' BETWEEN lt.Alkamispaivamaara AND coalesce(lt.Paattymispaivamaara,'9999-01-01')
        
    AND 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
        AND     lt.Koodi IN ('1','2','3')
            
        AND l.Alkamispaivamaara BETWEEN cast(cast(@vuosi as int)-1 as varchar)+'-08-01' AND cast(cast(@vuosi as int) as varchar)+'-12-31'    
        
    )
    
    -- Viimeinen tilaisuus tulla mukaan perusjoukkoon
    INSERT into #tkopisk (oppilaitostunnus,hetu,opiskelijaavain,opiskelija_id,opiskeluoikeus_id,opiskeluoikeusavain)
    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        
    AND         oo.id NOT IN (SELECT opiskeluoikeus_id AS ID FROM #tkopisk) -- Ei edellisessä
    
    AND             h.db  = @db
    AND             p.db  = @db
    AND            oo.db = @db
    AND         lt.db = @db 
    
                                
    AND     ot.Koodi IN ('1') -- tutkinto-oikeus
    AND     kt.Koodi IN ('1') -- aktiivinen
    
    --AND        cast(cast(@vuosi as int) AS varchar) + '-01-01' BETWEEN lt.Alkamispaivamaara AND coalesce(lt.Paattymispaivamaara,'9999-01-01')
            
        -- jolla on läsnäoloja    
    AND 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
        AND        lt.Koodi IN ('1','2','3')
    
        AND l.Alkamispaivamaara BETWEEN cast(@vuosi AS varchar) + '-01-01' AND cast(@vuosi  AS varchar) +'-12-31'    
    )
    
    
    
    
    -- Läsnäolotiedot
    
    -- olotamm :: kevään ilmo tilanne
    UPDATE  T
    set T.olotamm = 1
    FROM #tkopisk T
    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
        AND     lt.Koodi  IN ('1') -- läsnä
        
        -- 2015-01-01
            
        AND l.Alkamispaivamaara BETWEEN cast(@vuosi AS varchar) +'-01-01' AND cast(@vuosi AS varchar) +'-07-31'        
    )
    and T.olotamm is null
    ;
    
    
    UPDATE  T
    set T.olotamm = 2
    FROM #tkopisk T
    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
                
        AND        lt.Koodi IN ('2','3') -- poissa, poissa ei kuluta
        
        -- "2015-01-01"
        
        AND l.Alkamispaivamaara BETWEEN cast(@vuosi AS varchar) + '-01-01' AND cast(@vuosi AS varchar) + '-07-31'    
    )
    and T.olotamm is null
    ;
    
    -- ei ilmoa keväällä, nollaksi
    UPDATE  T
    set T.olotamm=0
    FROM #tkopisk T
    WHERE T.olotamm is null
    ;
    
    -- olosyys 
    UPDATE  T
    set T.olosyys = 1
    FROM #tkopisk T
    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
                
        AND        lt.Koodi  IN ('1') -- läsnä
        
            -- 2015-08-01
        
        AND l.Alkamispaivamaara BETWEEN cast(@vuosi AS varchar) + '-08-01' AND cast(@vuosi AS varchar) + '-12-31'        
    )
    and T.olosyys is null
    ;
    
    UPDATE  T
    set T.olosyys = 2
    FROM #tkopisk T
    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
                
        AND        lt.Koodi IN ('2','3') -- poissa, poissa ei kuluta
        
                -- 2015-08-01
        
        AND l.Alkamispaivamaara BETWEEN cast(@vuosi AS varchar) + '-08-01' AND cast(@vuosi AS varchar) + '-12-31'    
        
    )
    and T.olosyys is null
    ;
    
    -- ei ilmoa syksyllä, nollaksi
    UPDATE  T
    set T.olosyys=0
    FROM #tkopisk T
    WHERE T.olosyys is null
    ;
    
    
    -- edellinen olosyys 
    UPDATE  T
    set T.edellinen_syysolo = 1
    FROM #tkopisk T
    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
                
        AND        lt.Koodi  IN ('1') -- läsnä    
        
        AND l.Alkamispaivamaara BETWEEN cast(cast(@vuosi as int)-1 as varchar)+'-08-01' AND cast(cast(@vuosi as int)-1 as varchar)+'-12-31'
        
    )
    and T.edellinen_syysolo is null
    ;
    
    UPDATE  T
    set T.edellinen_syysolo = 2
    FROM #tkopisk T
    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
                
        AND        lt.Koodi IN ('2','3') -- poissa, poissa ei kuluta
        
        AND l.Alkamispaivamaara BETWEEN cast(cast(@vuosi as int)-1 as varchar)+'-08-01' AND cast(cast(@vuosi as int)-1 as varchar)+'-12-31'    
    )
    and T.edellinen_syysolo is null
    ;
    
    -- ei ilmoa syksyllä, nollaksi
    UPDATE  T
    set T.edellinen_syysolo=0
    FROM #tkopisk T
    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"
        
    FROM #tkopisk T
    WHERE (T.olotamm + T.olosyys + COALESCE(T.edellinen_syysolo,0) ) > 0
    
    
    DROP TABLE #tkopisk    
    DROP TABLE #param
        
        
    
    

    YO

    Läsnäolot YO
         
    
    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
    AND h.db = @db
    AND p.db = @db
                            -- tutkinto-oikeus
    AND 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
            AND     oo.db    = @db
            AND     lt.db    = @db
                    -- tutkinto-tyyppinen opiskeluoikeus
            AND ot.Koodi IN ('2','4')    
            AND kt.Koodi IN ('1')     --    aktiivinen        
        )    
        
                    -- ja jolla läsnäoloja
    AND p.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','2','3')
        AND     l.db = @db    
        
        AND l.Alkamispaivamaara BETWEEN cast(cast(@vuosi as int)-1 as varchar)+'-08-01' AND cast(cast(@vuosi as int) AS varchar)+'-12-31'        
        
    )
    AND p.ID NOT IN (SELECT opiskelija_id FROM #tkopisk)
    
    
    
    --  opiskeluoikeusavain
    UPDATE  T
    SET     opiskeluoikeus_id = o.ID
        ,     opiskeluoikeusavain = o.avain    
    FROM #tkopisk 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
        INNER JOIN Opiskeluoikeusjakso oj on oj.OpiskeluoikeusID = O.id
    WHERE     1=1
    AND        o.db     = @db
    AND        lt.db     = @db
    AND        oj.db     = @db
    
                            -- tutkinto-tyyppinen
    AND     ot.Koodi IN ('2','4')
    AND     kt.Koodi IN ('1') --aktiivinen
    AND        cast(cast(@vuosi as int)-1 AS varchar) + '-08-01' BETWEEN oj.Alkamispaivamaara AND coalesce(oj.Paattymispaivamaara,'9999-01-01')
    
    AND 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')
            AND     l.db = @db        
            AND l.Alkamispaivamaara BETWEEN cast(cast(@vuosi as int)-1 as varchar)+'-08-01' AND cast(cast(@vuosi as int) AS varchar)+'-12-31'        
        
    )    
    
    
    
    -- Läsnäolotiedot
    
    UPDATE  T
    SET olotamm = 1 
    FROM #tkopisk T
    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ä
        AND l.db = @db
                                -- Esim. 2015-01-01
         AND l.Alkamispaivamaara BETWEEN cast(@vuosi AS varchar)  +'-01-01' AND cast(@vuosi AS varchar)  +'-07-31'        
        
    )
    AND olotamm is null
    
    
    UPDATE  T
    set olotamm = 2 
    FROM #tkopisk T
    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
        AND l.db = @db
                                -- Esim. 2015-01-01
         AND l.Alkamispaivamaara BETWEEN cast(@vuosi AS varchar)  +'-01-01' AND cast(@vuosi AS varchar)  +'-07-31'    
    )
    and olotamm is null
    
    
    -- ei ilmoa keväällä, tyhjäksi
    UPDATE  T
    set olotamm = 0 
    FROM #tkopisk T
    WHERE olotamm is null
    
    
    
    -- olosyys :: syksyn ilmo tilanne
    UPDATE  T
    set olosyys= 1
    FROM #tkopisk T
    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ä
            
        AND l.db = @db
                            -- Esim. 2015-08-01
        AND l.Alkamispaivamaara BETWEEN cast(@vuosi AS varchar) + '-08-01' AND cast(@vuosi AS varchar) + '-12-31'        
    
    )
    AND olosyys is null
    
    
    
    UPDATE  T
    set olosyys = 2
    FROM #tkopisk T
    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
            AND l.db = @db
                            -- Esim. 2015-08-01
        AND l.Alkamispaivamaara BETWEEN cast(@vuosi AS varchar) + '-08-01' AND cast(@vuosi AS varchar) + '-12-31'
        
    )
    AND olosyys is null
    
    
    
    -- edellinen olosyys 
    UPDATE  T
    set edellinen_syysolo = 1
    FROM #tkopisk T
    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
                
        AND        lt.Koodi  IN ('1') -- läsnä    
        
        AND l.Alkamispaivamaara BETWEEN cast(cast(@vuosi as int)-1 as varchar)+'-08-01' AND cast(cast(@vuosi as int)-1 as varchar)+'-12-31'
        
    )
    and edellinen_syysolo is null
    
    
    
    UPDATE  T
    set edellinen_syysolo = 2
    FROM #tkopisk T
    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
                
        AND        lt.Koodi IN ('2','3') -- poissa, poissa ei kuluta
        
        AND l.Alkamispaivamaara BETWEEN cast(cast(@vuosi as int)-1 as varchar)+'-08-01' AND cast(cast(@vuosi as int)-1 as varchar)+'-12-31'    
    )
    and edellinen_syysolo is null
    
    
    
    -- ei ilmoa syksyllä, nollaksi
    UPDATE  T
    set edellinen_syysolo=0
    FROM #tkopisk T
    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"
        
    FROM #tkopisk T
    WHERE (T.olotamm + T.olosyys + COALESCE(T.edellinen_syysolo,0) ) > 0
    
    
    
    DROP TABLE #tkopisk    
    DROP TABLE #param
    
    

    Alkuun

  3. Perusjoukko Opiskeluoikeudet

    Ajanjaksoille

    syys     1.8.TILASTOVUOSI-1 - 31.12.TILASTOVUOSI-1

    kevät     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
     CREATE TABLE  [Opiskeluoikeus55](
        [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    
    
    
    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,opiskeluoikeusavain, 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        
    AND             h.db     = @db
    AND             p.db     = @db
    AND            oo.db     = @db
    AND         lt.db    = @db
                
    AND ot.Koodi IN ('1') -- tutkinto-oikeus
    AND kt.Koodi IN ('1') -- aktiivinen
    
    AND        cast(cast(@vuosi as int)-1 AS varchar) + '-08-01' BETWEEN lt.Alkamispaivamaara AND coalesce(lt.Paattymispaivamaara,'9999-01-01')
            
        -- jolla on läsnäoloja    
        
    AND 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
        AND     lt.Koodi IN ('1','2','3')
            
        AND l.Alkamispaivamaara BETWEEN cast(cast(@vuosi as int)-1 as varchar)+'-08-01' AND cast(cast(@vuosi as int) as varchar)+'-12-31'        
    )
    
    -- Viimeinen tilaisuus tulla mukaan perusjoukkoon
    INSERT into #tkopisk (oppilaitostunnus,hetu,opiskelijaavain,opiskelija_id,opiskeluoikeus_id,opiskeluoikeusavain, 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        
    AND         oo.ID NOT IN (SELECT opiskeluoikeus_id  FROM #tkopisk) -- Ei edellisessä
    
    AND             h.db  = @db
    AND             p.db  = @db
    AND            oo.db = @db
    AND         lt.db = @db 
                                
    AND     ot.Koodi IN ('1') -- tutkinto-oikeus
    AND     kt.Koodi IN ('1') -- aktiivinen
    
    --AND        cast(cast(@vuosi as int) AS varchar) + '-01-01' BETWEEN lt.Alkamispaivamaara AND coalesce(lt.Paattymispaivamaara,'9999-01-01')
            
        -- jolla on läsnäoloja    
    AND 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
        AND        lt.Koodi IN ('1','2','3')
    
        AND l.Alkamispaivamaara BETWEEN cast(@vuosi AS varchar) + '-01-01' AND cast(@vuosi  AS varchar) +'-12-31'    
    )
    
    
    --  opiskeluoikeusavain
    UPDATE  T
    SET 
        
             tila = 1    
        ,     oo_aloituspvm = oj.Alkamispaivamaara
        ,    Tkkoodi = tn.Koodi
        
    FROM #tkopisk 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
        INNER JOIN Opiskeluoikeusjakso oj on oj.OpiskeluoikeusID = O.id
        INNER JOIN Tutkintonimike tn on tn.ID = oj.TutkintonimikeID
        
    WHERE     1 = 1    
    AND             o.db     = @db
    AND         lt.db    = @db
    AND            oj.db     = @db
                
    AND ot.Koodi IN ('1') -- tutkinto-oikeus
    AND kt.Koodi IN ('1') -- aktiivinen
    
    AND        cast(cast(@vuosi as int)-1 AS varchar) + '-08-01' BETWEEN oj.Alkamispaivamaara AND coalesce(oj.Paattymispaivamaara,'9999-01-01')
            
        -- jolla on läsnäoloja    
        
    AND 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
        AND     lt.Koodi IN ('1','2','3')
            
        AND l.Alkamispaivamaara BETWEEN cast(cast(@vuosi as int)-1 as varchar)+'-08-01' AND cast(cast(@vuosi as int) as varchar)+'-12-31'    
        
    )
    
    
    --  opiskeluoikeusavain
    UPDATE  T
    SET     
        
            tila = 1    
        ,     oo_aloituspvm = oj.Alkamispaivamaara
        ,    Tkkoodi = tn.Koodi
        
    FROM #tkopisk 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
        INNER JOIN Opiskeluoikeusjakso oj on oj.OpiskeluoikeusID = O.id
        INNER JOIN Tutkintonimike tn on tn.ID = oj.TutkintonimikeID
        
    WHERE     1=1        
    
    AND             o.db     = @db
    AND         lt.db    = @db
    AND            oj.db     = @db
                                
    AND     ot.Koodi IN ('1') -- tutkinto-oikeus
    AND     kt.Koodi IN ('1') -- aktiivinen
    
    --AND        cast(cast(@vuosi as int) AS varchar) + '-01-01' BETWEEN oj.Alkamispaivamaara AND coalesce(oj.Paattymispaivamaara,'9999-01-01')
            
        -- jolla on läsnäoloja    
    AND 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
        AND        lt.Koodi IN ('1','2','3')
    
        AND l.Alkamispaivamaara BETWEEN cast(@vuosi AS varchar) + '-01-01' AND 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)
    AND        h.db     = @db
    AND        o.db     = @db
    AND        oo.db     = @db
    AND        L.db     = @db
    
    AND        LT.Koodi IN ('1') 
    AND        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 AND 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
    
    
    UPDATE T
    SET    
        lo_aloituspvm =      M.alk_pvm 
    
    FROM #tkopisk T
            
            join Opiskeluoikeus o on o.OpiskelijaID=T.opiskelija_id
            join  #Min_aloituspvm M  ON M.oid = o.id 
    
    WHERE o.db     = @db
    
    UPDATE T
    set  T.lo_aloituspvm =     T.oo_aloituspvm
    FROM #tkopisk T
    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    
        
    FROM #tkopisk T
    --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    
    
        
        
    
    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
    AND h.db = @db
    AND p.db = @db
                            -- tutkinto-oikeus
    AND 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
            AND     oo.db    = @db
            AND     lt.db    = @db
                    -- tutkinto-tyyppinen opiskeluoikeus
            AND ot.Koodi IN ('2','4')    
            AND kt.Koodi IN ('1')     --    aktiivinen        
        )    
        
                    -- ja jolla läsnäoloja
    AND p.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','2','3')
        AND     l.db = @db    
        
        AND l.Alkamispaivamaara BETWEEN cast(cast(@vuosi as int)-1 as varchar)+'-08-01' AND cast(cast(@vuosi as int) AS varchar)+'-12-31'        
        
    )
    AND p.ID NOT IN (SELECT opiskelija_id FROM #tkopisk)
    
    
    
    --  opiskeluoikeusavain
    UPDATE  T
    SET     opiskeluoikeus_id = o.ID
        ,     opiskeluoikeusavain = o.avain
        ,     tila = 1    
        ,     oo_aloituspvm = oj.Alkamispaivamaara
        ,    Tkkoodi = tn.Koodi
        
    FROM #tkopisk 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
        INNER JOIN Opiskeluoikeusjakso oj on oj.OpiskeluoikeusID = O.id
        INNER JOIN Tutkintonimike tn on tn.ID = oj.TutkintonimikeID
        
    WHERE     1=1
    AND        o.db     = @db
    AND        lt.db     = @db
    AND        oj.db     = @db
                            -- tutkinto-tyyppinen
    AND     ot.Koodi IN ('2','4')
    AND     kt.Koodi IN ('1') --aktiivinen
    AND        cast(cast(@vuosi as int)-1 AS varchar) + '-08-01' BETWEEN oj.Alkamispaivamaara AND coalesce(oj.Paattymispaivamaara,'9999-01-01')
    
    AND 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')
            AND     l.db = @db        
            AND l.Alkamispaivamaara BETWEEN cast(cast(@vuosi as int)-1 as varchar)+'-08-01' AND 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)
    AND    h.db    = @db
    AND    o.db    = @db
    AND    oo.db    = @db
    AND    L.db    = @db
    AND    olt.db    = @db
    AND    ot.Koodi IN ('2','4')    
    AND    kt.Koodi = '1' --aktiivinen
    AND    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    
    
    UPDATE T
    SET  lo_aloituspvm =      M.alk_pvm            
    FROM #tkopisk T
            INNER JOIN Opiskeluoikeus o on o.OpiskelijaID=T.opiskelija_id
            INNER JOIN #Min_aloituspvm M ON o.ID=M.oid
    WHERE 1=1
    AND o.db = @db
    
    UPDATE T
    set  T.lo_aloituspvm =     T.oo_aloituspvm
    FROM #tkopisk T
    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    
        
    FROM #tkopisk T
    
    
    
    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
     CREATE TABLE  [Pankki55](
        [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
    
    DELETE FROM [Pankki55]  WHERE oppilaitos = @korkeakoulu AND vuosi = @vuosi    
    
    INSERT INTO [Pankki55] ([oppilaitos],[oppilaitostunnus],[hetu],[opiskelijaAvain],[opiskeluoikeusAvain],[vuosi], uutta_pankkiin)     
    SELECT DISTINCT [oppilaitos],[oppilaitostunnus],[hetu],[opiskelijaAvain],[opiskeluoikeusAvain],[vuosi] , CASE WHEN summa >= 55 THEN summa -55  ELSE 0 END AS uutta_pankkiin  
    FROM [Pisteet55] WHERE oppilaitos =  @korkeakoulu AND 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 AND P2.opiskelijaAvain = P.opiskelijaAvain AND P.opiskeluoikeusAvain = P2.opiskeluoikeusAvain
             JOIN Lasnaolo55 L ON L.oppilaitostunnus = P.oppilaitostunnus AND L.opiskelijaAvain = P.opiskelijaAvain  AND L.opiskeluoikeusAvain = P.opiskeluoikeusAvain         
                    
    WHERE    P.oppilaitos    =     @db
    AND        P.vuosi         =     @vuosi
    AND        P2.vuosi         =     @vuosi
    AND        L.vuosi         =     @vuosi
    AND        L.uusi_opisk_kevat     = 1  
    AND        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 AND P.opiskelijaAvain = PUU.opiskelijaAvain AND P.opiskeluoikeusAvain = PUU.opiskeluoikeusAvain
         JOIN Lasnaolo55 L ON L.oppilaitostunnus = P.oppilaitostunnus AND L.opiskelijaAvain = P.opiskelijaAvain  AND L.opiskeluoikeusAvain = P.opiskeluoikeusAvain
    WHERE     PUU.oppilaitos    =     @db
    AND        P.vuosi         =     @vuosi
    AND        PUU.vuosi         =     cast(@vuosi AS int)+1    
    AND        L.vuosi         =     @vuosi
    AND        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 AND VV.oppilaitos = P2.oppilaitos AND VV.opiskelijaAvain = P2.opiskelijaAvain AND VV.opiskeluoikeusAvain = P2.opiskeluoikeusAvain )
                    +     ( SELECT TOP 1 COALESCE(VV2.pankki_kumu_ennen_55,0)      FROM Pankki55 VV2 WHERE VV2.vuosi = P2.vuosi AND VV2.oppilaitos = P2.oppilaitos AND VV2.opiskelijaAvain = P2.opiskelijaAvain AND VV2.opiskeluoikeusAvain = P2.opiskeluoikeusAvain )                                 
                                                                      
                      )                                      
            
    FROM     Pankki55 P 
        JOIN Pisteet55 P2 ON P2.oppilaitostunnus = P.oppilaitostunnus AND P2.opiskelijaAvain = P.opiskelijaAvain   AND P.opiskeluoikeusAvain = P2.opiskeluoikeusAvain
                        
    WHERE    P.oppilaitos =     @db
    AND        P.vuosi =         @vuosi
    AND        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 AND P2.opiskelijaAvain = P.opiskelijaAvain AND P.opiskeluoikeusAvain = P2.opiskeluoikeusAvain  
                    
    WHERE    P.oppilaitos    =     @db
    AND        P.vuosi         =     @vuosi
    AND        P2.vuosi         =     @vuosi
    AND        P2.summa         < 55
    AND        P2.summa         > 0    
    AND        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 AND P.opiskelijaAvain = PUU.opiskelijaAvain AND P.opiskeluoikeusAvain = PUU.opiskeluoikeusAvain
    WHERE PUU.oppilaitos    =     @db
    AND        P.vuosi         =     @vuosi
    AND        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 AND P2.opiskelijaAvain = P.opiskelijaAvain  AND P.opiskeluoikeusAvain = P2.opiskeluoikeusAvain 
                    
    WHERE    P.oppilaitos    =     @db
    AND        P.vuosi         =     @vuosi
    AND        P2.vuosi         =     @vuosi
    AND        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 AND P.opiskelijaAvain = PUU.opiskelijaAvain AND P.opiskeluoikeusAvain = PUU.opiskeluoikeusAvain
    WHERE PUU.oppilaitos    =     @db
    AND        P.vuosi         =     @vuosi
    AND        PUU.vuosi         =     cast(@vuosi AS int)+1
    Pankki YO
     DECLARE @vuosi varchar(4) = @vuosi_para
    DECLARE @db varchar(20) = @korkeakoulu
     
    DELETE FROM [Pankki55]  WHERE oppilaitos = @korkeakoulu AND vuosi = @vuosi   
     
    INSERT INTO [Pankki55] ([oppilaitos],[oppilaitostunnus],[hetu],[opiskelijaAvain],[opiskeluoikeusAvain],[vuosi], uutta_pankkiin)    
    SELECT DISTINCT [oppilaitos],[oppilaitostunnus],[hetu],[opiskelijaAvain],[opiskeluoikeusAvain],[vuosi] , CASE WHEN summa >= 55 THEN summa -55  ELSE 0 END AS uutta_pankkiin 
    FROM [Pisteet55] WHERE oppilaitos =  @korkeakoulu AND 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 AND P2.opiskelijaAvain = P.opiskelijaAvain 
             JOIN Lasnaolo55 L ON L.oppilaitostunnus = P.oppilaitostunnus AND L.opiskelijaAvain = P.opiskelijaAvain         
                     
    WHERE    P.oppilaitos    =     @db
    AND        P.vuosi         =     @vuosi
    AND        P2.vuosi         =     @vuosi
    AND        L.vuosi         =     @vuosi
    AND        L.uusi_opisk_kevat     = 1 
    AND        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 AND P.opiskelijaAvain = PUU.opiskelijaAvain 
         JOIN Lasnaolo55 L ON L.oppilaitostunnus = P.oppilaitostunnus AND L.opiskelijaAvain = P.opiskelijaAvain 
    WHERE     PUU.oppilaitos    =     @db
    AND        P.vuosi         =     @vuosi
    AND        PUU.vuosi         =     cast(@vuosi AS int)+1   
    AND        L.vuosi         =     @vuosi
    AND        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 AND VV.oppilaitos = P2.oppilaitos AND VV.opiskelijaAvain = P2.opiskelijaAvain  )
                    +     ( SELECT TOP 1 COALESCE(VV2.pankki_kumu_ennen_55,0)      FROM Pankki55 VV2 WHERE VV2.vuosi = P2.vuosi AND VV2.oppilaitos = P2.oppilaitos AND VV2.opiskelijaAvain = P2.opiskelijaAvain  )                                
                                                                       
                      )                                     
             
    FROM     Pankki55 P
        JOIN Pisteet55 P2 ON P2.oppilaitostunnus = P.oppilaitostunnus AND P2.opiskelijaAvain = P.opiskelijaAvain   
                         
    WHERE    P.oppilaitos =     @db
    AND        P.vuosi =         @vuosi
    AND        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 AND P2.opiskelijaAvain = P.opiskelijaAvain 
                     
    WHERE    P.oppilaitos    =     @db
    AND        P.vuosi         =     @vuosi
    AND        P2.vuosi         =     @vuosi
    AND        P2.summa         < 55
    AND        P2.summa         > 0   
    AND        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 AND P.opiskelijaAvain = PUU.opiskelijaAvain 
    WHERE PUU.oppilaitos    =     @db
    AND        P.vuosi         =     @vuosi
    AND        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 AND P2.opiskelijaAvain = P.opiskelijaAvain  
                     
    WHERE    P.oppilaitos    =     @db
    AND        P.vuosi         =     @vuosi
    AND        P2.vuosi         =     @vuosi
    AND        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 AND P.opiskelijaAvain = PUU.opiskelijaAvain
    WHERE PUU.oppilaitos    =     @db
    AND        P.vuosi         =     @vuosi
    AND        PUU.vuosi         =     cast(@vuosi AS int)+1
        
        
    
    


    Alkuun


  5. Perusjoukko Opiskelijat


    Opiskelija55
    CREATE TABLE  [Opiskelija55](
        [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])
    
    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
    AND        O.db = @kk
    AND        H.db = @kk
    AND        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])
     
    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
    AND        O.db = @kk
    AND        H.db = @kk
    AND        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_pisteetedellinen_lv_kevat_pisteetsumma
123456789334444201203030
1234567893344442013264167
1234567893344442014342458
1234567893344662015183048
123456789334466201633538


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_pankistapankki_saldo_55suorittanut_27suorittanut_55_ilman_pankkiasuorittanut_55_pankin_avulla
12345678933444420123003100
1234567893344442013123015010
1234567893344662014315018010
12345678933446620150185511001
Opiskeluoikeus55
opiskelijaAvain

opiskeluoikeusAvain

vuosi


tila


lo_aloituspvm


oo_aloituspvm


Tkkoodi
123456789
2011
1.1.2012

123456789334444201211.1.20121.8.2011655502
123456789334444201311.8.20121.8.2012655502
123456789334466201411.8.20121.8.2012751502
123456789334466201511.8.20121.8.2012751502
Lasnaolo55
opiskelijaAvain

opiskeluoikeusAvain


vuosi

syys_olokevat_oloedellinen_syys_olo

uusi_opisk_kevat 


uusi_opisk
123456789
201120000
123456789334444201211211
123456789334444201311100
123456789334466201411100
123456789334466201511100


Alkuun


Lyhyt kuvaus laskentaprosessista.

  1. Lasketaan pisteet 2006 - 2016
  2. Haetaan läsnäolotiedot 2006 - 2016
  3. Haetaan opiskeluoikeustiedot 2006 - 2016
  4. Poimitaan keväällä aloittaneet
  5. Poimitaan kaikki tilastovuoden uudet opiskelijat
  6. Alustetaan pankkitiedot
  7. Lasketaan kevällä aloittaneiden >= 27 op keränneet
  8. Lasketaan kumulatiivinen pankkitili
  9. Pankkisaldot kumulatiivisen laskennan jälkeen
  10. Kerätään yhteen opiskelijat
  11. 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())
)


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]              
               ,[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     
                                                                    AND OK.oppilaitostunnus = O.oppilaitostunnus
             
             LEFT JOIN  Lasnaolo55 L             ON    L.vuosi = OK.vuosi
                                                                    AND L.oppilaitostunnus = OK.oppilaitostunnus 
                                                                    AND    L.opiskelijaAvain = OK.opiskelijaAvain
                                                                    
                                                                    AND L.opiskeluoikeusAvain = OK.opiskeluoikeusAvain

             LEFT JOIN  Pisteet55 P              ON        P.vuosi = L.vuosi
                                                                    AND P.oppilaitostunnus = L.oppilaitostunnus
                                                                    AND P.opiskelijaAvain = L.opiskelijaAvain                                                                   
     
                                                                   AND P.opiskeluoikeusAvain = L.opiskeluoikeusAvain

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

    WHERE O.oppilaitos = @korkeakoulu
	AND        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]
          ,    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     
                                                                    AND OK.oppilaitostunnus = O.oppilaitostunnus
             
             LEFT JOIN  Lasnaolo55 L             ON    L.vuosi = OK.vuosi
                                                                    AND L.oppilaitostunnus = OK.oppilaitostunnus 
                                                                    AND    L.opiskelijaAvain = OK.opiskelijaAvain
                                                                    
                                                                    --AND L.opiskeluoikeusAvain = OK.opiskeluoikeusAvain

             LEFT JOIN  Pisteet55 P              ON        P.vuosi = L.vuosi
                                                                    AND P.oppilaitostunnus = L.oppilaitostunnus
                                                                    AND P.opiskelijaAvain = L.opiskelijaAvain                                                                    
     
                                                                    --AND P.opiskeluoikeusAvain = L.opiskeluoikeusAvain

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

    WHERE O.oppilaitos = @korkeakoulu
	AND        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


Kysymykset ja vastaukset

Perusjoukon määrittely

  • Sisällytetäänkö laskentaan myös lukuvuoden aikana eronneet (esim. toiseen korkeakouluun siirtyneet)?

Vastaus: Kyllä. Kaikki opiskelijat jotka ovat kyseisessä korkeakoulussa keränneet opintopisteitä lasketaan mukaan perusjoukkoon ja mikäli ovat myös >= 55 op suorittaneet tulevat myös mukaan 55 suorittaneiden joukkoon.


  • Kun opintopisteiden perusjoukon poiminnassa (ja muutamassa muussakin kohdassa) lukee: ”opiskelijoille joille tälle ajanjaksolle voimassa aktiivinen opiskeluoikeus tyyppiä 2, 4”, tarkoittaako se, että:
    a.       opintopisteet huomioidaan aikaväliltä 1.8.VUOSI-1 – 31.7.VUOSI, kunhan opiskelijalla on ollut tuolla aikavälillä ainakin yhden päivän voimassa em. ehdot täyttävä opiskeluoikeus, vai että:
    b.      opintopisteet poimitaan aikavälin 1.8.VUOSI-1 – 31.7.VUOSI niiltä osaväleiltä, joina opiskelijalla on ollut voimassa em. ehdot täyttävä opiskeluoikeus, vai sittenkin että:
    c.       opiskelijalla pitää olla ollut 20.9.VUOSI (lukuvuotta seuraavana syksynä 20.9.) voimassa em. ehdot täyttävä opiskeluoikeus? (opinto-oikeuden voimassa ololla välillä 1.8.VUOSI-1 – 31.7.VUOSI ei ole merkitystä.)

Vastaus:
a. Ei lasketa päiviä. Eli riittäsi yksikin päivä.
b. Kyllä. Tilastovuosi yhdistää osat. Pisteet edelliseltä lukuvuodelta tilastovuoden perspektiivistä, läsnäolotiedot ja voimassa ollut tutkinnon opiskeluoikeus edellisellä lukuvuonna. 
c. Ei.  Mutta edellisellä, 1.8.VUOSI-1 - 31.7.VUOSI pitää olla oikeus voimassa 20.9.VUOSI-1.


Hyväksiluetut suoritukset

  • Lasketaanko hyväksiluvut mukaan kirjauspäivän mukaan vaikka se olisi suoritettu ennen opintojen alkua?

Vastaus: Jos kirjauspäivällä tarkoitetaan samaa kuin suoritukselle rekistöröity päivämäärä (hyväksilukupäivä tai muuten suorituspäivä) niin kyllä. Kaikki hyväksiluetut pisteet lasketetaan mukaan vaikka on suoritettu ennen opintojen alkua.
Esim. Siirtoopiskelija joka tuo toiseen korkeakouluun mukanaan 100 op jotka hyväksiluetaan,  tästä kertyy 45 p pankkiin seuraavalle vuodelle uudessa korkeakoulussa.


Pankki

  • Esimerkissä opiskelija oli ensimmäisen lukukautensa (syksy) poissa, sitä seuraavan kevään läsnä. Tästä seurasi, että opiskelija katsottiin keväällä aloittaneeksi, ja opintopisteiden tavoiteraja oli 27 op. Opinto-oikeuden keskelle (opiskelun aloittamisen ja opinto-oikeuden päättymisen väliin osuvia) poissaoloja ei ilmeisesti huomioida laskennassa mitenkään? Eli, jos opiskelija on vaikkapa ensimmäisen lukuvuotensa (syksy + kevät) läsnä, ja sitä seuraavan kokonaisen lukuvuoden (syksy + kevät) kokonaan poissa, niin tavoiteraja jälkimmäisen lukuvuoden osalta on edelleen 55 op (eikä 0 op.)?

Vastaus: Tällä hetkellä pisteet lasketaan joka tapauksessa. Eli jos opiskelijalla on ollut välivuosi kesken opintojen niin siltä ajalta on kertynyt 0 pistettä ja pankki myös tyhjenee silloin mikäli nyt ei ollut kertynyt reilusti pisteitä pankkin edellisiltä vuosilta.

  • Case jossa opiskelijan ensimmäinen opinto-oikeus (kandi tai maisteri) on alkanut vaikkapa 1.8.1980 (ollut läsnä syksyllä 1980), ja hän on siihen liittyen valmistunut taiteen maisteriksi v. 1992. Opiskelija on sittemmin päässyt suorittamaan tutkintoa,  uusi opinto-oikeus on alkanut 1.8.2005, ja hän on ollut ensimmäisen syyslukukauden (syksy 2005) poissa, sitä seuraavan kevään (kevät 2006) läsnä: Casen opiskelijaa ei ilmeisesti katsota keväällä 2006 aloittaneeksi. – Vai katsotaanko? Ts. alkaako pankki kertyä vuodesta 1981 (opintopisteet 1.8.1980 – 31.7.1981), vai vuodesta 2006 (opintopisteet 1.8.2005 – 31.7.2006)?

Vastaus: Noin pitkälle historiaan kuin 80-luvulta asti ei ole poimittu. Toistaiseksi tehdyissä testilaskennoissa on vuodesta 2006 alkaen aloitettu laskennat.  Siitä ajasta jolta korkeakouluille vielä mahdollista kaikkien osalta saada poimittua dataa läsnäolo- ja pistelaskentoja ynm. varten ja saada tulos myös valmiiksi laskettua vuorokauden aikana. Tässä esimerkissä olisi siis tullut vuodesta 2006 aloittanut, siltä väliltä löytynyt opiskeluoikeusjakso. 1980 vuonna alkanut oikeus, läsnäolot tai pisteet eivät olisi mukana.


  • Miten 55.0 opintopistelaskenta toimii siinä tapauksessa, että opiskelija on ulkomailla vaihdossa ja on ilmoittautunut siksi aikaa poissaolevaksi? Tyhjeneekö pankkitili? (ei varmaan saisi tyhjentyä). Pitäisikö näitä tapauksia käsitellä eri tavalla?

Vastaus: Itse 55 pistelaskenta ei ota kantaa onko opiskelija läsnä tai poissa. Pisteet lasketaan joka tapauksessa jos on voimassa oleva opiskeluoikeus. Jos opiskelija ei ole kerännyt 55 op edellisenä lukuvuonna ja tilillä ei riitä katetta niin se tyhjenee.
Yksi mittareista on toki jossa osuus 55 läsnaolevista, mutta se on vielä ehdotus. Muissa mittareissa lasketaan yhteen 55, 27 op olipa opiskelija läsna tai ei.

Raportti ja mittarit

55 op raportista https://extra.vipunen.fi/opintotiedot/Sivut/55-op.aspx


  • Väh. 55 op suorittaneet:  onko tämä sarake se mikä tulisi 55 op suorittaneiden osuudeksi uudella laskentatavalla?

Vastaus:

Kyllä ja ei.

1. Väh. 55 opintopistettä suorittaneet on summa mittareista 3, 4 ja 5 (3=27 op keväällä, 4= 55 op ilman pankkia, 5= 55 op pankin avulla)
2. Vähintään 55 opintopistettä suorittaneiden, rahoitusmalli (Sama kuin 1.  paitsi että keväällä aloittaneiden 27 op (3.) määrä jaettuna kahdella).


  • Onko tässä perusjoukkona syksyllä 14 kirjoilla olleet (eli mukana myös ne jotka valmistuivat esim. toukokuussa 2015)


Vastaus:
Perusjoukkona esim. lv 14-15 on syyslukukaudella 2014 ja/tai kevätlukukaudella 2015  kirjoilla olleet.

Eli jos on ollut syksyllä 2014 kirjoilla ja valmistunut esim. vuoden lopussa tai kevään 2015 puolella tulee mukaan.


  •  Väh. 55 op suorittaneet, rahoitusmalli: miten eroaa edellisestä? Meidän koulun osalta eroa edelliseen on -3 opiskelijaa. Mistä tuo ero käytännössä syntyy?

Vastaus:

Väh. 55 opintopistettä suorittaneet, rahoitusmalli" on sama kuin 1. paitsi että keväällä aloittaneiden 27 op (3.) määrä jaettuna kahdella.


  • Keväällä aloittaneista väh. 27 op suorittaneet: tässä on siis esillä 2014-15, eli tarkoittaako tuo sellaisia keväällä 2015 opiskeluoikeuden saaneita jotka saivat tehdyksi vähintään 27 op ajalla 1.1 – 31.7.2015?

Vastaus:

Keväällä 2015 aloittaneet jotka ovat keränneet pisteitä 27 op tai enemmän 1.1 – 31.7.2015. Aloitustieto kevällä aloittanut ensimmäisen läsnäololukukauden mukaan.
Opiskeluoikeus on esim. alkanut viime syksynä 2014, mutta aloittanut opiskelut vasta keväällä 2015, eli kun ensimmästä kertaa läsnä opiskelemassa.



  • Suorittaneet 55 op pankin kanssa: onko tässä sellaiset joilla 2014-15 kertymä ei ollut 55 op, mutta ylsivät siihen kun otettiin huomioon edellisten lukuvuosien kumulatiiviset saldot?

Vastaus:

Suorittanut 55 op ilman pankkia" ovat edellisenä lukuvuonna 2014-15 >= 55 op keränneet, joko ensimmäisen vuoden jälkeen, tai vanhempi opiskelija joka kerännyt 55 op ilman että tarvinnut käyttää pankkia.
Esim. 60 op kerännyt,  tästä menee seuraavalle vuodelle 5 op pankkiin, jotka ensi vuonna tarvitaan mikäli on silloin vain 50 op, ja näiden 5 op avulla tuona vuonna pääsee ryhmään "Suorittanut 55 op pankin avulla


  • Läsnäolleet: minkä ajankohdan läsnäolotilanne tämä on? Tilastointivuosi vai edellinen syksy?

Vastaus:

Tilastovuoteen nähden edellinen lukuvuosi. Eli tilastovuoden 2015 nähden edellinen syys 2014 ja/tai kevätlukukausi 2015 läsnäolleet


  • Lasketaanko uudessa tavassa prosenttiosuus vain läsnäolijoista (eikä kaikista kirjoilla olleista kuten vanhassa laskentatavassa)?
    55 op suorittaneiden osuus: Onko tämä prosentti se mikä saadaan kun katsotaan kuinka monta prosenttia sarakkeessa ”Väh. 55 op suorittaneet” oleva luku on sarakkeen ”Läsnäolleet” luvusta?

Vastaus:

Nyt raportissa on edellisenä lukuvuotena 2014-15 ”Väh. 55 op suorittaneet", syksyllä 2014 ja/tai kevällä 2015 läsnäolleiden osuudesta.


  • Millä tavoin näissä luvuissa on käsitelty hyväksilukuja?
    Onko mukaan laskettu kaikki sellaiset hyväksilukemiset joissa hyväksikukemispäivä ajoittuu aikavälille 1.8.2014 – 31.7.2015 ja suorituspäivä voi olla mikä tahansa päivä (vaikka 10 v vanha)?

Vastaus:

Hyväksilukupäivämäärän mukaan 1.8.2014 – 31.7.2015, suorituspäivä voi olla vaikka 10 v vanha.
Opintopisteiden päivämäärät on ennakkoon tallennettu omaan näkymään kaikista opintosuorituksista niin että laskennassa se päivämäärä jonka mukaan lasketaan tulee hyväksilukupäivämäärä jos sellainen on, muuten käytetään suorituspäivämäärää.

Tarkistustiedostot ja niiden hyödyntämien

Kysymys: Olisiko mahdollista tuottaa 55 op -tiedon (ja jatkossa päivittäiseen, ajankohtaiseen) tarkistukseen yhdistelmää tiedostoista "tarkistus_55_2016_OPPILAITOS.csv" ja "tktutk2016_OPPILAITOS.csv" ? Ensiksi mainitusta puuttuu oleellisia, tarkistusta nopeuttavia kenttiä kuten: Sukunimi, Etunimet, Opintopisteet yhteensä, Suoritettavien opintojen laajuus.


Vastaus:


Alkuun


  • No labels

10 Comments

  1. Lisää kysymyksiä...

  2. Unknown User (virrahi@laurea.fi)

    'Vähintään 55 opintopistettä suorittaneiden, rahoitusmalli', jaetaanko tässä myös vain syyslukukauden läsnäolleiden (valm. / eronnut joulukuussa) määrä kahdella? 

  3. Ei. Vain kevään jaetaan kahdella.

  4. Mikä merkitys on tilastovuoden syyskauden läsnäololla?

     

    1. Nyt syksyn 2016 osalta ei mitään muuta kuin tarkistusmielessä.
      Vuosittaisissa "olos"-tiedoissa pitäisi olla vastaava määrä (läsnä ja poissa olevia) kuin sitä seuraavan vuoden "edellinen_syysolo" tiedoissa esiintyy.
      Mutta esim. siirtoopiskelijat antavat oman mausteensa tähän.

       

       

       

  5. ExtraVipusen raportilla sarakkeet loogisempaan järjestykseen, jolloin otsikotkin saa helpommin ymmärrettäviksi (esim. siten, että kertyvät vasemmalta oikealle ja viimeisenä lopullinen määrä).

  6. Kiitos palautteesta! Voidaan muuttaa järjestystä jos sillä saa helpommin ymmärrettävän raportin.
    Kysessä on vasta ensimmäinen versio, ei mikään kiveen hakattu versio.

     

  7. Kaisu Piiroinen: Näissä tietovarannasta päivittyvissä tiedoissa periaate on se, että korjaus vaikuttaa rahoituslaskentaan sillä yhden vuoden tiedot ovat mukana rahoitusmallilaskennassa kolmen vuoden ajan (=laskettaessa kolmen vuoden keskiarvoa). Eli vuonna X tilanne lukitaan aineistovuoden Y osalta. Kun tiedot poimitaan uudelleen vuonna X+1, tarkistetaan onko vuoden Y tietoihin tullut päivityksiä ja otetaan ne (korjatut tiedot) mukaan vuonna X+1 ja X+2. Eli takautuvasti voi korjata tietoja, mutta ne eivät vaikuta valmiiseen laskentaan, mutta tulevat mukaan kahtena seuraavana vuonna.

  8.  Läsnäolevien määrä 55 op raportilla ja csv-tarkistustiedostossa.

    Kysymys HY: "Emme kuitenkaan saa määritelmällä täsmälleen samoja lukuja kuin mitä Vipusessa on. Läsnäolevien määrä on Vipusessa 2013-2016 joka vuodelle 2 opiskelijaa enemmän ja vuonna 2017 3 opiskelijaa enemmän."

     

     

     

    1. Vastaus:

      Hei

      Kysymyksesi mistä läsnäolleiden määrä tulee extravipusen 55 op raportille.

      Koskee kuvauksen 55oplaskennanpoimintakuvaus-mittarit_extravipunen

      kohtaa  6. Läsnäolleiden määrä (läsnäolotieto 1 joko syksyllä tai keväällä (esim. s2014 tai k2015)).

      Aineisto josta mainitsette on varmaan kaksi kertaa viikossa Virrassa muodostuvat  tarkistus_55.csv aineistot VirtaSFTP hakemistoonne?

      Jos esim. teidän nyt ajankohtaisen  tarkistus_55_2018_HY.csv tiedoston  avaa Excelissä läsnäolo tiedot tulee hakea taulukon sarakkeista
      "edellinen_syysolo" (sarake F) ja "olok" (sarake G)

      edellinen_syysolo (=S2017) ja olok (=K2018) lasketaan läsnä jos 1.

      Kombinaatiot että on 1 (=Läsnä) ovat:

      edellinen_syys   olok
       1                        1        Läsnä syys ja kevät
       2                        1        Poissa syys, läsnä kevät
       1                        2        Läsnä syys, poissa kevät
       0                        1        Ei kirjoilla syys, läsnä kevät
       1                        0        Läsnä syys, ei kirjoilla kevät


      2018 on tilastovuosi, ja tarkastellään edellistä lukuvuotta 2017-18,  "edellinen syys" on 2018 nähden syyslukukausi 2017 ja kevät on kevätlukukausi 2018.

      Sama edellisten 2017, 2016 jne. edellinen lukuvuosi aina tilastovuoteen nähden.