Poimintakuvaus (6.2.2019)  tavoiteajassa tutkinnon suorittaneet poiminta VIRTAsta

Poimintakuvaus

  1. Poimitaan perusjoukkoon  AMK (tyyppi 1), Alempi korkeakoulu (tyyppi 2) ja ylempi korkeakoulututkinnot (tyyppi 4)
    tutkintosuorituksen suoritusvuoden mukaan (tilastovuosi=kalenterivuosi.  Virta opintosuoritus laji 1 (tutkintosuoritus)

  2. Poimitaan tutkintosuoritukseen liitetty opiskeluoikeus, sen alkamispäivämäärä, suoritetun tutkinnon koulutuskoodi (6 numeroinen Tilastokeskuksen koulutuskoodi) ynm tarvittavat tunnistetiedot.

    Tutkinnon suorittaneet perusjoukko

    Tutkinnon suorittaneet perusjoukko
    -- Perusjoukko, tutkinnon suorittaneet    
    CREATE TABLE #Tutkinnon_suorittaneet (    
        opiskelijaid int,
        opiskeluoikeusid int, 
        opintosuoritusid int,    
        tutkintonimikeid int,
        opiskelijaAvain     varchar(100),
        opiskeluoikeusAvain varchar(100),
        opintosuoritusAvain varchar(100),
        tutkintokoodi    varchar(6),
        tutkinnonsuorituspvm date,    
        tavoiteaika_lukukausia smallint,
        tavoiteaika_kuukausia int,
        vaadittu_tutkinnon_laajuus_op int default(0),
        opiskeluoikeustyyppi smallint,
        liittyva_oikeus int null,
    	koulutustyyppi smallint null
    )
    
    -- Opiskeluaika, läsnä, poissaolot
    CREATE TABLE #Opiskeluaika (    
        opiskelijaid int,
        opiskeluoikeusid int, 
        opintosuoritusid int,    
        ooAlkamispvm date,
        tutkinnonsuorituspvm date,        
        lukukaudet int default (0),
        kuukausia int default (0), 
        paivia int default (0),
        vuosia float,
        opiskeluoikeustyyppi smallint,
        lasnaoloLukukaudet int default (0),
        lasnaoloKuukaudet int default (0),
        kaytetty_aika_kk int,    
        poissaoloLukukaudet int default (0),
        poissaoloKuukaudet int default (0),    
        KokonaisAika_kk int,
        opiskeluoikeusAvain varchar(100) 
    )
    
    /* Tavoiteaika, tutkinnon laajuuden mukaan. 60 opintopistettä - tavoitteellinen suorittamisaika 1 vuosi = 12 kuukautta = 2 lukukautta  */
    INSERT INTO #Tavoiteaika (vuodet, tavoiteaika_kuukausia, tavoiteaika_lukukausia, vaadittu_op ) VALUES ( 0.5,  6,  1 , 30 )
    INSERT INTO #Tavoiteaika (vuodet, tavoiteaika_kuukausia, tavoiteaika_lukukausia, vaadittu_op ) VALUES (  1,  12,  2 , 60 ) 
    INSERT INTO #Tavoiteaika (vuodet, tavoiteaika_kuukausia, tavoiteaika_lukukausia, vaadittu_op ) VALUES ( 1.5, 18 , 3 , 90 )
    INSERT INTO #Tavoiteaika (vuodet, tavoiteaika_kuukausia, tavoiteaika_lukukausia, vaadittu_op ) VALUES (  2 , 24,  4 , 120 )
    INSERT INTO #Tavoiteaika (vuodet, tavoiteaika_kuukausia, tavoiteaika_lukukausia, vaadittu_op ) VALUES ( 2.5, 30,  5 , 150 )
    INSERT INTO #Tavoiteaika (vuodet, tavoiteaika_kuukausia, tavoiteaika_lukukausia, vaadittu_op ) VALUES (  3 , 36,  6 , 180 )
    INSERT INTO #Tavoiteaika (vuodet, tavoiteaika_kuukausia, tavoiteaika_lukukausia, vaadittu_op ) VALUES ( 3.5, 42,  7 , 210 )
    INSERT INTO #Tavoiteaika (vuodet, tavoiteaika_kuukausia, tavoiteaika_lukukausia, vaadittu_op ) VALUES (  4 , 48,  8 , 240 )
    INSERT INTO #Tavoiteaika (vuodet, tavoiteaika_kuukausia, tavoiteaika_lukukausia, vaadittu_op ) VALUES ( 4.5, 54,  9 , 270 )
    INSERT INTO #Tavoiteaika (vuodet, tavoiteaika_kuukausia, tavoiteaika_lukukausia, vaadittu_op ) VALUES (  5 , 60, 10 , 300 )
    INSERT INTO #Tavoiteaika (vuodet, tavoiteaika_kuukausia, tavoiteaika_lukukausia, vaadittu_op ) VALUES ( 5.5, 66, 11 , 330 )
    INSERT INTO #Tavoiteaika (vuodet, tavoiteaika_kuukausia, tavoiteaika_lukukausia, vaadittu_op ) VALUES (  6 , 72, 12 , 360 )  
    
    CREATE NONCLUSTERED INDEX IX_Tavoiteaika ON #Tavoiteaika  (vaadittu_op)  
     
     
    -- Perusjoukko tutkinnon suorittaneet tilastovuonna, #Tavoiteaika taulusta tutkinnon tavoiteaika
    INSERT INTO #Tutkinnon_suorittaneet( opiskelijaid, opiskeluoikeusid, opintosuoritusid, tutkintonimikeid, opiskelijaAvain, opiskeluoikeusAvain
                                        , opintosuoritusAvain, tutkintokoodi, tutkinnonsuorituspvm, tavoiteaika_lukukausia, tavoiteaika_kuukausia, vaadittu_tutkinnon_laajuus_op, opiskeluoikeustyyppi  )
    SELECT DISTINCT O.id, OO.id, OS.id, T.id, O.avain, OO.avain, OS.avain, T.Koodi, OS.Suorituspaivamaara, TA.tavoiteaika_lukukausia, TA.tavoiteaika_kuukausia, OO.Laajuus, OTYP.Koodi
    FROM     virta.dbo.Opiskelija O 
             JOIN virta.dbo.Opiskeluoikeus OO ON OO.OpiskelijaID = O.ID     
             JOIN virta.dbo.Opintosuoritus OS ON OS.OpiskeluoikeusID = OO.ID
             JOIN virta.dbo.Opintosuorituksen_laji OL ON OL.id = OS.Opintosuorituksen_lajiID
             JOIN virta.dbo.Tutkintonimike T ON T.id = OS.TutkintonimikeID
             JOIN virta.dbo.Opiskeluoikeuden_tyyppi OTYP ON OTYP.id = OO.Op_oikeuden_tyyppiID
             LEFT JOIN #Tavoiteaika TA ON TA.vaadittu_op = OO.Laajuus
    WHERE     O.db = @mydb
    AND        OO.db = @mydb
    AND        OS.db = @mydb
    AND        OL.Koodi = '1'     -- Tutkinto laji opintosuoritus
    AND        YEAR(OS.Suorituspaivamaara) = @tutkintoSuoritusVuosi
    AND     T.koodi < 800000    -- Ei tohtoreita
    AND OTYP.Koodi NOT IN ('3','5') -- Ei ylempi AMK tutkinto, ei erikoislääkäri
    AND OTYP.Koodi IN ('1','2','4')  -- AMK tutkinto, Alempi ja ylempi korkeakoulututkinto
    
    CREATE NONCLUSTERED INDEX IX_Tutkinnon_suorittaneet_opiskelijaid ON #Tutkinnon_suorittaneet (opiskelijaid) 
            INCLUDE (opiskeluoikeusid,opintosuoritusid); 
    


    Tutkintoon liitetyn Opiskeluoikeuden alkamispäivämäärä on suoraan korkeakoulun ilmoittama  Opiskeluoikeus.AlkuPvm mukaan.
    Siirto-opiskelijalle alkuperäisen opiskeluoikeuden alkamispäivämäärä Opiskeluoikeus.Siirtopaivamaara. Katso kohta 8. Siirto-opiskelija

    Opiskeluoikeuden aloituspvm

    Opiskeluoikeuden alkamispäivmäärä
    -- Esim. tässä Opiskeluoikeuden alkamispäivämäärä,  AlkuPvm = 1.8.2013
    
    <Opiskeluoikeus avain="1234"opiskelijaAvain="4567">
      <AlkuPvm>2013-08-01</AlkuPvm>
      <LoppuPvm>2018-05-23</LoppuPvm>
  3. Yliopistot: Tarkistetaan onko kyseiseen opiskeluoikeuteen liittyvyys, opiskeluoikeus tyyppi 4 maisteri (liittyvä tyyppi 2 kandi)

    "Mikäli opiskelijalle on annettu tutkinnon suoritusoikeus samaan aikaan sekä alempaan että ylempään korkeakoulututkintoon, on tutkinnon tavoiteaika näiden
    opinto-oikeuksien yhteenlaskettu aika ja tutkinnon suorittamisaika lasketaan alemman korkeakoulututkinnon aloittamisajasta."


    Liittyvä oikeus
    Expand source
    -- Alempi-Ylempi Korkeakoulututkinto == Kandi-Maisteri opiskeluoikeuden liittyvyys
    UPDATE T
    SET T.liittyva_oikeus = OL.OpiskeluoikeusID            
    FROM #Tutkinnon_suorittaneet T
            JOIN virta.dbo.Opiskeluoikeuden_liittyvyys OL ON T.opiskeluoikeusid = OL.OpiskeluoikeusID2    
            JOIN virta.dbo.Opiskeluoikeuden_tyyppi OTYP ON OTYP.koodi = T.opiskeluoikeustyyppi
    WHERE T.opiskeluoikeustyyppi = '4'       
    AND OL.db = @mydb  
     
     
    -- Liittyvä opiskeluoikeus kandi-maisteri == alempi-ylempi kk-tutkinto  
    -- Kandi-maisteri  jos samanaikaisesti, käsitellään yhdessä 5 vuotta  
    UPDATE T   
    SET T.vaadittu_tutkinnon_laajuus_op = 300 ,
        T.tavoiteaika_lukukausia = 10
    FROM #Tutkinnon_suorittaneet T
            JOIN virta.dbo.Opiskeluoikeus OO ON OO.id = T.opiskeluoikeusid
    WHERE   T.liittyva_oikeus IS NOT NULL  
    AND        T.liittyva_oikeus IN ( SELECT     OS.OpiskeluoikeusID 
                                    FROM      virta.dbo.Opintosuoritus OS 
                                    WHERE   OS.OpiskeluoikeusID = T.liittyva_oikeus
                                    AND        OS.db = @mydb
                                    AND     OS.Opintosuorituksen_lajiID = 1
                                    AND        OS.Suorituspaivamaara <= T.tutkinnonsuorituspvm
                                    )
     


    AMK: Koulutustyyppi 1 = Päivämuotototeutus, 2 = Monimuotototeutus. TK-koodisto ent. 1=Nuorten koulutus, 2=Aikuiskoulutus

    Koulutustyyppi
    -- Koulutustyyppi, AMK  1 = Amk-tutkintoon johtava nuorten koulutus, 2 = Amk-tutkintoon johtava aikuiskoulutus  Tilastokeskuksen koodisto (AMK Opiskelijatiedonkeruu)
    UPDATE T
    SET T.koulutustyyppi = (
                            case OTYP.Koodi
                            when '1' -- Ammattikorkeakoulututkinto tyyppi
    
    
                            then    case
                                        when o.Aikuiskoulutus = '1' then '2' -- =Amk-tutkintoon johtava aikuiskoulutus                                    
                                        else '1'     -- =Amk-tutkintoon johtava nuorten koulutus
                                    end    
                            
                            end
                        )
    FROM #Tutkinnon_suorittaneet T
            JOIN virta.dbo.Opiskeluoikeus O on o.ID = T.opiskeluoikeusid    
            JOIN virta.dbo.Opiskeluoikeuden_tyyppi OTYP ON OTYP.koodi = T.opiskeluoikeustyyppi
    WHERE T.opiskeluoikeustyyppi  IN  (1)
    AND O.db = @mydb 



  4. Tutkinnon vaadittu laajuus opiskeluoikeuden laajuus tiedosta (vaadittu laajuus opintopisteissä)

    Opiskeluoikeus Laajuus

    Opiskeluoikeuden laajuus
    <Opiskeluoikeus ...>
     <Laajuus>
        <Opintopiste>180</Opintopiste>
      </Laajuus>
    </Opiskeluoikeus>
    Esim opiskeluoikeus
    <Opiskeluoikeus avain="1234" opiskelijaAvain="4567">
      <AlkuPvm>2013-08-01</AlkuPvm>
      <LoppuPvm>2018-05-23</LoppuPvm>
      <Tila>
        <AlkuPvm>2018-05-24</AlkuPvm>
        <Koodi>3</Koodi>
      </Tila>
      <Tila>
        <AlkuPvm>2013-08-01</AlkuPvm>
        <LoppuPvm>2018-05-23</LoppuPvm>
        <Koodi>1</Koodi>
      </Tila>
      <Tyyppi>2</Tyyppi>
      <Myontaja>01901</Myontaja>
      <Jakso koulutusmoduulitunniste="LuK, Matematiikan koulutusohjelma, Matematiikka">
        <AlkuPvm>2013-08-01</AlkuPvm>
        <LoppuPvm>2015-12-31</LoppuPvm>
        <Koulutuskoodi>642101</Koulutuskoodi>
        <Koulutuskunta>091</Koulutuskunta>
      </Jakso>
      <Jakso koulutusmoduulitunniste="LuK, Tietojenkäsittelytieteen koulutusohjelma, Tietojenkäsittelytiede">
        <AlkuPvm>2016-01-01</AlkuPvm>
        <LoppuPvm>2018-05-23</LoppuPvm>
        <Koulutuskoodi>642201</Koulutuskoodi>
        <Koulutuskunta>091</Koulutuskunta>
      </Jakso>
      <Ensisijaisuus>
        <AlkuPvm>2013-08-01</AlkuPvm>
        <LoppuPvm>2018-05-23</LoppuPvm>
      </Ensisijaisuus>
      <Koulutusala versio="ohjausala">7</Koulutusala>
      <Liittyvyys liittyvaOpiskeluoikeusAvain="1235" />
      <Laajuus>
        <Opintopiste>180</Opintopiste>
      </Laajuus>
    </Opiskeluoikeus>



    Tutkintojen laajuudet poimitaan ensisijaisesti tutkintosuoritukseen liitetyn opiskeluoikeuden vaadittu laajuus tiedoista, jos laajuus tieto opiskeluoikeudesta puuttuu käytetään koulutuskoodin mukaan
    jonkun muun tutkinnon sama koulutuskoodin laajuustietoa.

    Jos vaadittu laajuus tieto edelleen puuttuu tai on 0 op käytössä vakio arvot 180 op, 120 op opiskeluoikeuden tyypin mukaan, ynm. poikkeavat suoraan Tilastokeskuksen koulutuskoodin mukaan.


    Tavoiteaika taulukko tutkinnon vaaditun laajuuden mukaan (1 vuosi = 60 op, 2 lukukautta, 12 kuukautta )

    Tavoite vuodetTavoite_lukukaudetTavoite_kuukaudetVaadittu tutkinnon laajuus (op)
    0,51630
    121260
    1,531890
    2424120
    2,5530150
    3636180
    3,5742210
    4848240
    4,5954270
    51060300
    5,51166330
    61272360



    Vaadittu laajuus
    -- Kutsutaan kun kerätään vaadittu laajuus per tutkintokoodi, jos puuttuu eikä aiemmin tiedossa
    --PROCEDURE [dbo].[sp_tutkinto_vaadittu_laajuus] ( @tutkintokoodi varchar(6), @vaadittu_laajuus int )
    --AS
    --IF NOT EXISTS ( SELECT * FROM  dbo.tutkinto_vaadittu_laajuus T WHERE T.tutkintokoodi = @tutkintokoodi AND T.vaadittu_laajuus > 0   ) 
    --BEGIN 
      --  IF ( @vaadittu_laajuus > 0)
      --  BEGIN
      --      INSERT INTO  dbo.tutkinto_vaadittu_laajuus (tutkintokoodi,vaadittu_laajuus) 
      --      VALUES ( @tutkintokoodi, @vaadittu_laajuus)
      --  END
    --END
     
    --Otetaan talteen vaadittu laajuus per tutkintokoodi, jos puuttuu joltakin opiskeluoikeudelta
    DECLARE @koodi VARCHAR(max) 
    DECLARE c CURSOR FOR
    SELECT tutkintokoodi
    FROM #Tutkinnon_suorittaneet
    DECLARE @laajuus int
    OPEN c
    FETCH NEXT FROM c INTO @koodi
    WHILE @@FETCH_STATUS = 0
    BEGIN     
        IF NOT EXISTS (SELECT * FROM  dbo.tutkinto_vaadittu_laajuus WHERE tutkintokoodi = @koodi) 
        BEGIN
            SELECT @laajuus = vaadittu_tutkinnon_laajuus_op
            FROM #Tutkinnon_suorittaneet T
            WHERE T.tutkintokoodi = @koodi           
            AND T.vaadittu_tutkinnon_laajuus_op IS NOT NULL
             
            EXEC sp_tutkinto_vaadittu_laajuus @koodi, @laajuus
             
            SET @laajuus = 0
        END
        FETCH NEXT FROM c INTO @koodi
    END
    CLOSE c
    DEALLOCATE c
     
     
    -- Tunnetut ja poikkeavat
    -- Lääketieteen lisensiaatti (360 op)
    UPDATE #Tutkinnon_suorittaneet
    SET vaadittu_tutkinnon_laajuus_op = 360,
        tavoiteaika_lukukausia = 12
    WHERE    tutkintokoodi = '772101'
    -- Hammaslääketieteen lisensiaatti (330 op)
    UPDATE #Tutkinnon_suorittaneet
    SET vaadittu_tutkinnon_laajuus_op = 330,
        tavoiteaika_lukukausia = 11
    WHERE tutkintokoodi = '772201'
    -- Eläinlääketieteen lisensiaatti (360 op)
    UPDATE #Tutkinnon_suorittaneet
    SET vaadittu_tutkinnon_laajuus_op = 360,
        tavoiteaika_lukukausia = 12
    WHERE    tutkintokoodi = '772301'
    -- Psykologian maisteri 733501  (330 op)
    UPDATE #Tutkinnon_suorittaneet
    SET vaadittu_tutkinnon_laajuus_op = 330,
        tavoiteaika_lukukausia = 11
    WHERE  tutkintokoodi = '733501'
    --  Musiikin maisteri 723111 (330 op) 
    UPDATE #Tutkinnon_suorittaneet
    SET vaadittu_tutkinnon_laajuus_op = 330,
        tavoiteaika_lukukausia = 11
    WHERE    tutkintokoodi = '723111'
    --  Kuvataiteen maisteri 724101 (330 op)
    UPDATE #Tutkinnon_suorittaneet
    SET vaadittu_tutkinnon_laajuus_op = 330,
            tavoiteaika_lukukausia = 11
    WHERE   tutkintokoodi = '723111'
     
    UPDATE T
    SET T.vaadittu_tutkinnon_laajuus_op = L.vaadittu_laajuus 
    FROM #Tutkinnon_suorittaneet T
            JOIN dbo.tutkinto_vaadittu_laajuus L ON L.tutkintokoodi = T.tutkintokoodi 
    WHERE T.vaadittu_tutkinnon_laajuus_op IS NULL
    AND L.vaadittu_laajuus > 0
     
    UPDATE T
    SET T.tavoiteaika_lukukausia = TA.tavoiteaika_lukukausia        
    FROM #Tutkinnon_suorittaneet T
            JOIN #Tavoiteaika TA ON TA.vaadittu_op = T.vaadittu_tutkinnon_laajuus_op 
    WHERE T.tavoiteaika_lukukausia IS NULL
     
    -- Maisterit
    UPDATE #Tutkinnon_suorittaneet
    SET vaadittu_tutkinnon_laajuus_op = 120,
        tavoiteaika_lukukausia = 4
    WHERE vaadittu_tutkinnon_laajuus_op IS NULL
    AND tutkintokoodi LIKE '7%'
    AND tutkintokoodi  NOT IN ('772101','772201','772301','733501','723111','724101')
    AND @kk_tyyppi = '42'
      
    -- Maisterit, muu tai joku muu tuntematon
    UPDATE #Tutkinnon_suorittaneet
    SET vaadittu_tutkinnon_laajuus_op = 120,
        tavoiteaika_lukukausia = 4
    WHERE vaadittu_tutkinnon_laajuus_op = 0
    AND tutkintokoodi LIKE '7%'
    AND tutkintokoodi  NOT IN ('772101','772201','772301','733501','723111','724101')
    AND @kk_tyyppi = '42'
      
    -- Kandit samma sak
    UPDATE #Tutkinnon_suorittaneet
    SET vaadittu_tutkinnon_laajuus_op = 180,
            tavoiteaika_lukukausia = 6
    WHERE     vaadittu_tutkinnon_laajuus_op  = 0
    AND     tutkintokoodi LIKE '6%'
    AND @kk_tyyppi = '42'
    UPDATE #Tutkinnon_suorittaneet
    SET vaadittu_tutkinnon_laajuus_op = 180,
            tavoiteaika_lukukausia = 6
    WHERE     vaadittu_tutkinnon_laajuus_op  IS NULL
    AND     tutkintokoodi LIKE '6%'
    AND @kk_tyyppi = '42'
     
     
    UPDATE T
    SET T.tavoiteaika_lukukausia = TA.tavoiteaika_lukukausia        
    FROM #Tutkinnon_suorittaneet T
            JOIN #Tavoiteaika TA ON TA.vaadittu_op = T.vaadittu_tutkinnon_laajuus_op 
    WHERE T.tavoiteaika_lukukausia IS NULL




    5.Tausta lisätietoja raportille opiskelijasta tutkinnon suorittaneen lisätietoja: ikä suoritushetkellä, sukupuoli. Onko aiempia tutkintoja missä tahansa Suomen korkeakouluissa, tietoa käytetään aiemman samantasoisen tutkinnon tarkistuksessa


    Ikä
    -- Opiskelijan perustiedot
    INSERT
     INTO #HenkiloTiedot ( henkiloid, opiskelijaid, henkilotunnus, 
    sukupuoli, tutkinnonsuorituspvm, tutkintokoodi, opiskelijaAvain, db, 
    tutkinnontaso )
    SELECT
     DISTINCT H.id, O.id, H.henkilotunnus, S.koodi, T.tutkinnonsuorituspvm, 
    T.tutkintokoodi, O.avain, O.db, T.opiskeluoikeustyyppi
    FROM virta.dbo.henkilo H
            JOIN virta.dbo.opiskelija O ON O.henkiloid = H.id
            JOIN virta.dbo.Sukupuoli S ON S.id = H.SukupuoliID
            JOIN #Tutkinnon_suorittaneet T  ON T.opiskelijaid = O.id
    WHERE     O.db = @mydb
    AND     H.db = @mydb
     
    CREATE NONCLUSTERED INDEX IX_HenkiloTiedot_opiskelijaid ON #HenkiloTiedot (id)
        INCLUDE (opiskelijaid,tutkinnonsuorituspvm);
     
    -- ikä tutkinnon suoritushetkellä hetun, syntymäajan avulla
    DECLARE @henkilotunnus varchar(12)
    DECLARE @oAvain varchar(200)
    DECLARE @ika tinyint 
    DECLARE @a_pvm date
    DECLARE @b_pvm date
    DECLARE @counter int
    DECLARE @maxi int
    DECLARE @tutkintotaso smallint
    SELECT @counter = min(id) FROM #HenkiloTiedot
    SELECT @maxi    = max(id) FROM #HenkiloTiedot
    WHILE @counter <= @maxi
    BEGIN
        SELECT @henkilotunnus = henkilotunnus FROM #HenkiloTiedot WHERE id = @counter   
        SELECT @b_pvm = tutkinnonsuorituspvm FROM #HenkiloTiedot WHERE id = @counter
             
        SELECT @a_pvm  = CONVERT( date, 
                                case when  substring(@henkilotunnus, 7,1) = 'A' THEN substring(@henkilotunnus,1,2)+'.'+substring(@henkilotunnus,3,2)+'.20'+substring(@henkilotunnus, 5,2) 
                                    when substring(@henkilotunnus, 7,1) = '-' THEN substring(@henkilotunnus,1,2)+'.'+substring(@henkilotunnus,3,2)+'.19'+substring(@henkilotunnus, 5,2) 
                                end ,  104) 
        SELECT @ika = dbo.Laske_ika ( @a_pvm, @b_pvm )
        -- Ikä tutkinnon suoritushetkellä 
        UPDATE #HenkiloTiedot
        SET ika =  @ika
        WHERE  id = @counter
         
        SET @counter = @counter + 1   
    END
    -- "Ei ikää" - tuntematon = -1
    UPDATE #HenkiloTiedot
    SET ika = -1
    WHERE ika IS NULL
     
     
     
     
    -- Tällä kerätään kaikki ja myöhemmin tarkistetaan tämän avulla onko opiskelija suorittanut aiemmin samantasoisen tutkinnon
    DECLARE @vuosi int
    SET @vuosi = 2000
     
    WHILE  @vuosi <= YEAR(getdate())
    BEGIN
     
            INSERT
     INTO virtavie.dbo.Tavoiteajassa_aiemmin_tutkinnon_suorittaneet ( 
    Henkilotunnus, tutkintokoodi, tutkinnonsuorituspvm, opiskelijaAvain, db,
     tutkinnontaso )     
                 
            SELECT DISTINCT H.Henkilotunnus, T.Koodi, OS.Suorituspaivamaara, O.avain, O.DB, KL.koulutusastetaso1_koodi
     
            FROM  virta.dbo.henkilo H
                    JOIN virta.dbo.Opiskelija O ON O.HenkiloID = H.id
                    JOIN virta.dbo.Opiskeluoikeus OO ON OO.OpiskelijaID = O.ID     
                    JOIN virta.dbo.Opintosuoritus OS ON OS.OpiskeluoikeusID = OO.ID
                    JOIN virta.dbo.Opintosuorituksen_laji OL ON OL.id = OS.Opintosuorituksen_lajiID
                    JOIN virta.dbo.Tutkintonimike T ON T.id = OS.TutkintonimikeID
                     
                     
                    -- 2019-05-03 Tutkinnon koulutusaste koulutusluokittelusta koulutuskoodin avulla
                    JOIN  dw.d_koulutusluokitus KL ON KL.koulutusluokitus_koodi = T.Koodi
                     
                    
     
     
            WHERE  OL.Koodi = '1'
            AND KL.koulutusastetaso1_koodi > 0   -- Ei tuntemattomia
            AND YEAR(OS.Suorituspaivamaara) =  @vuosi
              
     
            SET  @vuosi =  @vuosi + 1   
    END
     

    6.Tarkistetaan onko aiempi saman tason (tutkinnon koulutusaste Tilastokeskuksen 6-numeroisen koulutuskoodin avulla) Suomessa suoritettu tutkinto ( rajaus vuoden > 2000 jälkeen suoritettu korkeakoulu tutkinto)

    Aiempi tutkinto
    -- Onko opiskelijalla olemassa aiempi saman tason tutkinto jostain korkeakoulusta?
    SELECT @counter = min(id) FROM #HenkiloTiedot
    SELECT @maxi  = max(id) FROM #HenkiloTiedot
    DECLARE @tk varchar(6)
    WHILE @counter <= @maxi
    BEGIN
        SELECT @henkilotunnus = henkilotunnus FROM #HenkiloTiedot WHERE id = @counter   
         
        SELECT @oAvain = opiskelijaAvain FROM #HenkiloTiedot WHERE id = @counter
         
        SELECT @b_pvm = tutkinnonsuorituspvm FROM #HenkiloTiedot WHERE id = @counter
         
        SELECT @tk = tutkintokoodi FROM #HenkiloTiedot WHERE id = @counter
         
        SELECT @tutkintotaso = tutkinnontaso FROM  #HenkiloTiedot WHERE id = @counter   
           IF EXISTS     (    SELECT * 
                        FROM     Tavoiteajassa_aiemmin_tutkinnon_suorittaneet H                          
                        WHERE     H.henkilotunnus = @henkilotunnus 
                        AND     LEN(H.henkilotunnus)> 7   
                        AND         H.tutkinnonsuorituspvm < @b_pvm     -- Aiempi
                        AND     H.tutkintokoodi <> @tk
                        AND        H.tutkinnontaso = @tutkintotaso    -- Onko saman tason aiempi tutkinto?                    
                    )        
        BEGIN
                UPDATE #HenkiloTiedot
                SET on_aiempi_tutkinto = 1
                WHERE id = @counter           
        END
         
        -- Jos ei ole hetua, samasta korkeakoulusta opiskelijaavaimen avulla
        IF EXISTS     (    SELECT * 
                        FROM     Tavoiteajassa_aiemmin_tutkinnon_suorittaneet H                          
                        WHERE     H.henkilotunnus = @henkilotunnus 
                        AND     LEN(H.henkilotunnus)<= 7   
                        AND     H.opiskelijaAvain  = @oAvain
                        AND     H.db = @mydb                   
                        AND         H.tutkinnonsuorituspvm < @b_pvm     -- Aiempi
                        AND     H.tutkintokoodi <> @tk       
                        AND        H.tutkinnontaso = @tutkintotaso   -- Onko saman tason aiempi tutkinto?                
                    )            
        BEGIN
                UPDATE #HenkiloTiedot
                SET on_aiempi_tutkinto = 1        -- Kyllä on (1)!
                WHERE id = @counter           
        END
         
        SET @counter = @counter + 1   
    END


    7.Lasketaan tutkintoon käytetty aika, läsnäolon mukaan.

    Opiskeluaika = Opiskeluoikeuden alkamispäivämäärä ja tutkinnon suorituspäivämäärä, lukukausissa ja kuukausissa, pois laskettu mahdollinen poissaolo käytetystä ajasta.

    Käytetty aika kuukaudet = Opiskeluoikeuden alkamispäivämäärä - tutkinnon suorituspäivämäärä  kuukausissa
    (jos opiskeluoikeudessa ei poissaoloja, käytetty aika on tämä)

    Kuukausitietojen pyöristys päivänmäärätiedoista: Tarkastellaan opintojen aloittamiskuukauden ja tutkinnon suorittamiskuukauden päivänmäärätietoja (opiskeluoikeuden alkamispäivänmäärä ja tutkinnon suorituspäivänmäärä)  siten, että jos näiltä kuukausilta kertyy käytettyjä päiviä yhteensä yli 15 niin tutkintoon käytettyyn aikaan tulee yksi kuukausi lisää. Jos tutkinto suoritettu helmikuussa raja on 14 päivää.
    Katso esim. kuvaus

    Aika kuukausissa
    DECLARE @ooAlkamispvm date
    DECLARE @tutkinnonsuorituspvm date
    DECLARE @kuukausia int
    DECLARE @paivia int
    DECLARE @SeuraavaEnsimmainenPv date
    DECLARE @EdellinenEnsimmainenPv date
    
    SET @kuukausia = 0
    SET @paivia  = 0
    SET @counter = 0
    SET @maxi    = 0
    
    SELECT @counter = min(id) FROM #Opiskeluaika
    SELECT @maxi    = max(id) FROM #Opiskeluaika
    
    WHILE @counter <= @maxi
    BEGIN
    
        /* Opiskeluoikeuden alkamispäivämäärä */
        SELECT @ooAlkamispvm = O.ooAlkamispvm                   FROM #Opiskeluaika O WHERE O.id = @counter
        /* Tutkinnon suorituspäivämäärä     */
        SELECT @tutkinnonsuorituspvm = O.tutkinnonsuorituspvm   FROM #Opiskeluaika O WHERE O.id = @counter
        
        /* Esim. 2014-08-25 => 2014-09-01 */
        SELECT @SeuraavaEnsimmainenPv = DATEADD(d, 1, EOMONTH(@ooAlkamispvm)) 
        /* Esim. 2018-02-23 => 2018-02-01 */
        SELECT @EdellinenEnsimmainenPv = CAST(CAST(YEAR(@tutkinnonsuorituspvm)AS varchar(4)) + '-' + CAST(MONTH(@tutkinnonsuorituspvm) AS varchar(2)) + '-01'  AS date )  
        /* 2014-09-01 -  2018-02-01 välinen aika kuukausissa */ 
        SELECT @kuukausia   = DATEDIFF(mm, @SeuraavaEnsimmainenPv , @EdellinenEnsimmainenPv )   
        /*  2014-08-25 - 2014-09-01 + 2018-02-01 - 2018-02-23 välinen aika päivissä muista  +1 */
        SELECT @paivia      = DATEDIFF(dd, @ooAlkamispvm, @SeuraavaEnsimmainenPv ) + DATEDIFF(dd, @EdellinenEnsimmainenPv, @tutkinnonsuorituspvm) + 1
    
        /* Jos muu kuukausi kuin Helmikuu onko yli 15 päivää => +1 */
        IF ( @paivia > 15 AND MONTH(@tutkinnonsuorituspvm)<>2)
        BEGIN
            SELECT @kuukausia = @kuukausia + 1      
        END
    
        /*Helmikuu onko yli 14 päivää => +1 */
        IF ( @paivia > 14 AND MONTH(@tutkinnonsuorituspvm)=2)
        BEGIN
            SELECT @kuukausia = @kuukausia + 1      
        END
    
        UPDATE  O
        SET     O.kuukausia = @kuukausia
        FROM    #Opiskeluaika O
        WHERE   O.id = @counter
        
        SET @counter = @counter + 1 
        SET @kuukausia = 0
    
    END
    
    /* Käytetyistä ajasta (kuukaudet) vähennetään poissaoloaika lukukausiilmoittumisten mukaan (kuukausissa) */



    Käytetty aika kuukaudet = käytetty aika kuukaudet -  poissaolo kuukaudet
    (jos opiskeluoikeudessa  poissaoloja poistetaan poissaolot)

    Käytetyt lukukaudet =  läsnaolo lukukaudet   (ilmoittautumisten läsnälukukausia yhteensä  opiskeluoikeuden alkamispäivämäärän ja tutkinnon suorituspäivämäärän välillä)

    Läsnäolo
    IF ( @kk_tyyppi = 41 OR @onOOLukukausi = 1 ) 
    BEGIN    
     
        -- Nopeampi näin kuin suoraan Virta tauluun joini    
        INSERT INTO #LasnaolotAMK ( opiskelijaid, opiskeluoikeusid, Alkamispaivamaara, Paattymispaivamaara, db, opiskelijaAvain, opiskeluoikeusAvain, Lukukausi_ilmoittautumisen_tilaID   ) 
        SELECT DISTINCT L.OpiskelijaID, L.opiskeluoikeusid, L.Alkamispaivamaara, L.Paattymispaivamaara, L.db, O.avain AS OpiskelijaAvain , OO.avain AS opiskeluoikeusAvain,  L.Lukukausi_ilmoittautumisen_tilaID
        FROM     virta.dbo.Lukukausi_ilmoittautuminen L
                JOIN virta.dbo.Opiskelija O ON O.id = L.OpiskelijaID
                JOIN virta.dbo.Opiskeluoikeus OO ON OO.id = L.opiskeluoikeusid    
                -- Ei tutkinnon jälkeisiä
                JOIN #Tutkinnon_suorittaneet T ON     T.opiskeluoikeusid = L.opiskeluoikeusid
                -- Ei opiskeluoikeuden edeltäviä
                JOIN #Opiskeluaika OA ON OA.opiskeluoikeusid = L.opiskeluoikeusid
        WHERE  L.db = @mydb
        AND O.db = @mydb
        AND OO.db = @mydb
        --   Ei tutkinnon jälkeisiä ilmoittautumisia
        AND L.Alkamispaivamaara < T.tutkinnonsuorituspvm
        --  
        AND L.Paattymispaivamaara > OA.ooAlkamispvm
        AND OO.id IN (SELECT T.opiskeluoikeusid FROM #Tutkinnon_suorittaneet T WHERE T.opiskeluoikeusid = L.opiskeluoikeusid)                 
             
     
        CREATE NONCLUSTERED INDEX IX_LasnaolotAMK_opiskelijaid ON #LasnaolotAMK (opiskeluoikeusid)  INCLUDE (opiskelijaid);
     
         
        -- Lasnaolo Kuukaudet, ei siirto-opiskelija, ei poissaoloja
        UPDATE O
        SET O.lasnaoloKuukaudet =   
                                    (    SELECT sum(DATEDIFF(mm, L2.Alkamispaivamaara, L2.Paattymispaivamaara) +1)
                                        FROM #LasnaolotAMK L2 
                                        INNER JOIN virta.dbo.Lukukausi_ilm_tila LT2 ON LT2.id =  L2.Lukukausi_ilmoittautumisen_tilaID
                                        WHERE LT2.Koodi IN ('1','4') -- Läsnä --  
                                        AND L2.db = @mydb
                                        AND L2.OpiskelijaID = O.opiskelijaid AND O.opiskeluoikeusid = L2.OpiskeluoikeusID
                                    )
                                      
        FROM #Opiskeluaika O             
                INNER JOIN #LasnaolotAMK L ON L.opiskeluoikeusid = O.opiskeluoikeusid
                INNER JOIN virta.dbo.Lukukausi_ilm_tila LT ON LT.id =  L.Lukukausi_ilmoittautumisen_tilaID
        WHERE     LT.Koodi IN ('1','4') -- Läsnä -- 2019-05-05
        AND        L.db = @mydb
        AND     O.opiskeluoikeusid NOT IN (SELECT PS.opiskeluoikeusid FROM #PoissaEiSiirto PS)    -- Ei poissaoloja
        AND     O.opiskeluoikeusid NOT IN (SELECT S.opiskeluoikeusid FROM #SiirtoOpiskelija S)  -- Ei siirto-opiskelija
     
        -- Läsnäolo Lukukaudet, ei siirto-opiskelija, ei poissaoloja
        UPDATE O
        SET O.lasnaoloLukukaudet =  
                                    (    SELECT count(*) 
                                        FROM #LasnaolotAMK L2 
                                        INNER JOIN virta.dbo.Lukukausi_ilm_tila LT2 ON LT2.id =  L2.Lukukausi_ilmoittautumisen_tilaID
                                        WHERE LT2.Koodi IN ('1','4') -- Läsnä --  
                                        AND L2.db = @mydb
                                        AND L2.OpiskelijaID = O.opiskelijaid AND O.opiskeluoikeusid = L2.OpiskeluoikeusID
                                    )
                                          
        FROM #Opiskeluaika O            
                INNER JOIN #LasnaolotAMK L ON L.opiskeluoikeusid = O.opiskeluoikeusid
                INNER JOIN virta.dbo.Lukukausi_ilm_tila LT ON LT.id =  L.Lukukausi_ilmoittautumisen_tilaID
        WHERE LT.Koodi IN ('1','4') -- Läsnä --   
        AND L.db = @mydb
        AND O.opiskeluoikeusid NOT IN (SELECT PS.opiskeluoikeusid FROM #PoissaEiSiirto PS)   -- Ei poissaoloja
        AND O.opiskeluoikeusid NOT IN (SELECT S.opiskeluoikeusid FROM #SiirtoOpiskelija S)  -- Ei siirto-opiskelija
         
        -- Poissaolo Kuukaudet, ei siirto-opiskelija, on poissaoloja
        UPDATE O
        SET O.poissaoloKuukaudet =   
                                    (    SELECT sum(DATEDIFF(mm, L2.Alkamispaivamaara, L2.Paattymispaivamaara) +1)
                                        FROM #LasnaolotAMK L2 
                                        INNER JOIN virta.dbo.Lukukausi_ilm_tila LT2 ON LT2.id =  L2.Lukukausi_ilmoittautumisen_tilaID
                                        WHERE LT2.Koodi IN ('2', '3') -- Poissa
                                        AND L2.db = @mydb
                                        AND L2.OpiskelijaID = O.opiskelijaid AND O.opiskeluoikeusid = L2.OpiskeluoikeusID
                                    )
                                      
                                     
        FROM #Opiskeluaika O
                INNER JOIN #PoissaEiSiirto P ON P.opiskelijaid = O.opiskelijaid AND P.opiskeluoikeusid = O.opiskeluoikeusid 
                INNER JOIN #LasnaolotAMK L ON L.opiskeluoikeusid = P.opiskeluoikeusid
                INNER JOIN virta.dbo.Lukukausi_ilm_tila LT ON LT.id =  L.Lukukausi_ilmoittautumisen_tilaID
        WHERE LT.Koodi IN ('2', '3') -- Poissa
        AND L.db = @mydb
         
             
        -- Poissaolo Lukukaudet, ei siirto-opiskelija, On poissaoloja
        UPDATE O
        SET O.poissaoloLukukaudet =   
                                    (    SELECT count(*) 
                                        FROM #LasnaolotAMK L2 
                                        INNER JOIN virta.dbo.Lukukausi_ilm_tila LT2 ON LT2.id =  L2.Lukukausi_ilmoittautumisen_tilaID
                                        WHERE LT2.Koodi IN ('2', '3') -- Poissa
                                        AND L2.db = @mydb
                                        AND L2.OpiskelijaID = O.opiskelijaid AND O.opiskeluoikeusid = L2.OpiskeluoikeusID
                                    )     
                                          
        FROM #Opiskeluaika O
                INNER JOIN #PoissaEiSiirto P ON P.opiskelijaid = O.opiskelijaid AND P.opiskeluoikeusid = O.opiskeluoikeusid 
                INNER JOIN #LasnaolotAMK L ON L.opiskeluoikeusid = P.opiskeluoikeusid
                INNER JOIN virta.dbo.Lukukausi_ilm_tila LT ON LT.id =  L.Lukukausi_ilmoittautumisen_tilaID
        WHERE LT.Koodi IN ('2', '3') -- Poissa
        AND L.db = @mydb
     
        -- Lasnaolo Kuukaudet, ei siirto-opiskelija, On poissaoloja
        UPDATE O
        SET O.lasnaoloKuukaudet =   
                                    (    SELECT sum(DATEDIFF(mm, L2.Alkamispaivamaara, L2.Paattymispaivamaara) +1)
                                        FROM #LasnaolotAMK L2 
                                        INNER JOIN virta.dbo.Lukukausi_ilm_tila LT2 ON LT2.id =  L2.Lukukausi_ilmoittautumisen_tilaID
                                        WHERE LT2.Koodi IN ('1','4') -- Läsnä --   
                                        AND L2.db = @mydb
                                        AND L2.OpiskelijaID = O.opiskelijaid AND O.opiskeluoikeusid = L2.OpiskeluoikeusID                                
                                    )     
                                      
        FROM #Opiskeluaika O             
                INNER JOIN #LasnaolotAMK L ON L.opiskeluoikeusid = O.opiskeluoikeusid
                INNER JOIN virta.dbo.Lukukausi_ilm_tila LT ON LT.id =  L.Lukukausi_ilmoittautumisen_tilaID
                INNER JOIN #PoissaEiSiirto P ON P.opiskelijaid = O.opiskelijaid AND P.opiskeluoikeusid = O.opiskeluoikeusid 
        WHERE LT.Koodi IN ('1','4') -- Läsnä --        
        AND O.opiskeluoikeusid NOT IN (SELECT S.opiskeluoikeusid FROM #SiirtoOpiskelija S) -- Ei siirto-opiskelija
        AND L.db = @mydb
         
         
        -- Läsnäolo Lukukaudet, On poissaoloja,  ei siirto-opiskelija, On poissaoloja
        UPDATE O
        SET O.lasnaoloLukukaudet =   
                                    (    SELECT count(*) 
                                        FROM #LasnaolotAMK L2 
                                        INNER JOIN virta.dbo.Lukukausi_ilm_tila LT2 ON LT2.id =  L2.Lukukausi_ilmoittautumisen_tilaID
                                        WHERE LT2.Koodi IN ('1','4') -- Läsnä --  
                                        AND L2.db = @mydb
                                        AND L2.OpiskelijaID = O.opiskelijaid AND O.opiskeluoikeusid = L2.OpiskeluoikeusID
                                    )     
                                      
        FROM #Opiskeluaika O            
                INNER JOIN #LasnaolotAMK L ON L.opiskeluoikeusid = O.opiskeluoikeusid
                INNER JOIN virta.dbo.Lukukausi_ilm_tila LT ON LT.id =  L.Lukukausi_ilmoittautumisen_tilaID
                INNER JOIN #PoissaEiSiirto P ON P.opiskelijaid = O.opiskelijaid AND P.opiskeluoikeusid = O.opiskeluoikeusid
        WHERE LT.Koodi IN ('1','4') -- Läsnä --        
        AND O.opiskeluoikeusid NOT IN (SELECT S.opiskeluoikeusid FROM #SiirtoOpiskelija  S) -- Ei siirto-opiskelija
        AND L.db = @mydb
         
         
        -------------------------------------------------------------------------------------------------------------------
        --- #SiirtoOpiskelijan Läsnäolot  
         
        INSERT INTO #SiirtoOpiskelija_vanhat_lasnaolot (opiskelijaid, opiskeluoikeusid, opintosuoritusid ) 
        SELECT    S.opiskelijaid, S.opiskeluoikeusid, S.opintosuoritusid
        FROM     #SiirtoOpiskelija S
        WHERE     S.opiskeluoikeusid IN  (    SELECT OPL.OpiskeluoikeusID 
                                            FROM  virta.dbo.Op_oik_siir_opisk_liittyva_lukukausi OPL 
                                            JOIN #LasnaolotAMK L ON L.OpiskeluoikeusID = S.opiskeluoikeusid
                                            JOIN virta.dbo.Lukukausi_ilm_tila LT ON LT.ID = L.Lukukausi_ilmoittautumisen_tilaID        
                                            WHERE OPL.OpiskeluoikeusID = S.opiskeluoikeusid
                                            AND     L.db = @mydb
                                            AND     OPL.db = @mydb 
                                            AND        LT.Koodi IN ('1','4') -- Läsnä --    -- Läsnäoloja entisessä    
                                    )
     
        CREATE NONCLUSTERED INDEX IX_SiirtoopiskelijaLasna_opiskelijaid ON #SiirtoOpiskelija_vanhat_lasnaolot (opiskeluoikeusid)         
         
     
        -- #SiirtoOpiskelijan läsnäolot    ENNEN SIIRTOA
        UPDATE MY
        SET MY.lasnaolo_lukukaudet = COALESCE(    
                                                    (    SELECT OL.Maara 
                                                        FROM virta.dbo.Op_oik_siir_opisk_liittyva_lukukausi OL                                                             
                                                                JOIN virta.dbo.Lukukausi_ilm_tila LT ON LT.id = OL.Lukukausi_ilm_tilaID 
                                                        WHERE OL.OpiskeluoikeusID = MY.opiskeluoikeusid
                                                        AND     OL.db = @mydb
                                                        AND     LT.Koodi IN ('1','4') -- Läsnä --   
                                                    ) 
                                            , 0 ) 
                     
        FROM #SiirtoOpiskelija_vanhat_lasnaolot MY
        WHERE     MY.opiskeluoikeusid IN  (SELECT OPL.OpiskeluoikeusID FROM  virta.dbo.Op_oik_siir_opisk_liittyva_lukukausi OPL WHERE       OPL.db = @mydb AND OPL.OpiskeluoikeusID = MY.opiskeluoikeusid)            
             
         
        -- #SiirtoOpiskelijan Läsnäolo Lukukaudet SIIRRON JÄLKEEN
        UPDATE O
        SET O.lasnaoloLukukaudet = COALESCE(
                                        (    SELECT count(*) 
                                        FROM #LasnaolotAMK L2 
                                        INNER JOIN virta.dbo.Lukukausi_ilm_tila LT2 ON LT2.id =  L2.Lukukausi_ilmoittautumisen_tilaID
                                        WHERE LT2.Koodi IN ('1','4') -- Läsnä --  
                                        AND L2.db = @mydb
                                        AND L2.OpiskelijaID = O.opiskelijaid AND O.opiskeluoikeusid = L2.OpiskeluoikeusID
                                            )     
                                    , 0 )         
        FROM #Opiskeluaika O            
                INNER JOIN #LasnaolotAMK L ON L.opiskeluoikeusid = O.opiskeluoikeusid
                INNER JOIN virta.dbo.Lukukausi_ilm_tila LT ON LT.id =  L.Lukukausi_ilmoittautumisen_tilaID
        WHERE    O.opiskeluoikeusid IN (SELECT S.opiskeluoikeusid FROM #SiirtoOpiskelija S) 
        AND LT.Koodi IN ('1') -- Läsnä
        AND L.db = @mydb   
         
        -- Vanhat + uudet läsnäolot Lukukaudet
        UPDATE O
        SET O.lasnaoloLukukaudet = O.lasnaoloLukukaudet + SP.lasnaolo_lukukaudet
            , O.lukukaudet = O.lasnaoloLukukaudet + SP.lasnaolo_lukukaudet
        FROM #Opiskeluaika O
                JOIN #SiirtoOpiskelija_vanhat_lasnaolot SP ON SP.opiskeluoikeusid = O.opiskeluoikeusid
         
        UPDATE O
        SET O.lasnaoloKuukaudet = COALESCE(
                                    ( CASE WHEN O.lasnaoloLukukaudet%2 = 0 THEN O.lasnaoloLukukaudet*6  --Kokonainen lukuvuosi
                                          WHEN  O.lasnaoloLukukaudet = 1 AND MONTH(O.ooAlkamispvm) >= 8 THEN 5    -- Syyskausi
                                          WHEN  O.lasnaoloLukukaudet = 1 AND MONTH(O.ooAlkamispvm) <= 7 THEN 7 -- Kevätkausi
                                            
                                          WHEN  O.lasnaoloLukukaudet%3 = 0 AND MONTH(O.ooAlkamispvm) >= 8 THEN (O.lasnaoloLukukaudet*6 + 5)  -- Syyskausi
                                          WHEN  O.lasnaoloLukukaudet%3 = 0 AND MONTH(O.ooAlkamispvm) <= 7 THEN (O.lasnaoloLukukaudet*6 + 7)  -- Kevätkausi    
     
                                     END
                                    )
                                    , 0 ) 
        FROM #Opiskeluaika O
                JOIN #SiirtoOpiskelija_vanhat_lasnaolot SP ON SP.opiskeluoikeusid = O.opiskeluoikeusid
         
     
        -- #SiirtoOpiskelijan   POISSAOLOT  
        INSERT INTO #SiirtoOpiskelija_vanhat_poissaolot (opiskelijaid, opiskeluoikeusid, opintosuoritusid ) 
        SELECT    S.opiskelijaid, S.opiskeluoikeusid, S.opintosuoritusid
        FROM     #SiirtoOpiskelija S
        WHERE     S.opiskeluoikeusid IN (SELECT OPL.OpiskeluoikeusID 
                                    FROM  virta.dbo.Op_oik_siir_opisk_liittyva_lukukausi OPL 
                                            JOIN #LasnaolotAMK L ON L.OpiskeluoikeusID = S.opiskeluoikeusid
                                            JOIN virta.dbo.Lukukausi_ilm_tila LT ON LT.ID = L.Lukukausi_ilmoittautumisen_tilaID        
                                    WHERE OPL.OpiskeluoikeusID = S.opiskeluoikeusid 
                                    AND     L.db = @mydb
                                    AND        LT.Koodi IN ('2','3')                                 
                                    )
     
        CREATE NONCLUSTERED INDEX IX_SiirtoopiskelijaPoissa_opiskelijaid ON #SiirtoOpiskelija_vanhat_poissaolot (opiskeluoikeusid)     
         
     
        -- #SiirtoOpiskelijan AIEMMAT POISSAOLOT 
        UPDATE MY
        SET MY.poissa_lukukaudet = COALESCE(    
                                            (    SELECT SUM(OL.Maara) 
                                                FROM virta.dbo.Op_oik_siir_opisk_liittyva_lukukausi OL                                                             
                                                        JOIN virta.dbo.Lukukausi_ilm_tila LT ON LT.id = OL.Lukukausi_ilm_tilaID 
                                                WHERE OL.OpiskeluoikeusID = MY.opiskeluoikeusid
                                                AND     OL.db = @mydb
                                                AND     LT.Koodi IN ('2','3') -- Poissa, muu syy  Poissa, ei kuluta opintoaikaa
                                            ) 
                                    , 0 ) 
                                             
        FROM    #SiirtoOpiskelija_vanhat_poissaolot MY
        WHERE     MY.opiskeluoikeusid IN  (SELECT OPL.OpiskeluoikeusID FROM  virta.dbo.Op_oik_siir_opisk_liittyva_lukukausi OPL WHERE OPL.OpiskeluoikeusID = MY.opiskeluoikeusid)
          
         
        -- #SiirtoOpiskelijan Poissaolot SIIRRON JÄLKEEN Lukukaudet
        UPDATE O
        SET O.poissaoloLukukaudet = COALESCE(    
                                    (    SELECT count(*) 
                                        FROM #LasnaolotAMK L2 
                                        INNER JOIN virta.dbo.Lukukausi_ilm_tila LT2 ON LT2.id =  L2.Lukukausi_ilmoittautumisen_tilaID
                                        WHERE LT2.Koodi IN ('2','3') -- Poissa
                                        AND L2.db = @mydb
                                        AND L2.OpiskelijaID = O.opiskelijaid AND O.opiskeluoikeusid = L2.OpiskeluoikeusID
                                            )    
                                    , 0 )                 
        FROM #Opiskeluaika O            
                INNER JOIN #LasnaolotAMK L ON L.opiskeluoikeusid = O.opiskeluoikeusid
                INNER JOIN virta.dbo.Lukukausi_ilm_tila LT ON LT.id =  L.Lukukausi_ilmoittautumisen_tilaID
        WHERE    O.opiskeluoikeusid IN (SELECT S.opiskeluoikeusid FROM #SiirtoOpiskelija S) 
        AND LT.Koodi IN  ('2','3')  -- Poissa
        AND L.db = @mydb   
     
        -- Vanhat ja uudet poissaolot Lukukaudet
        UPDATE O
        SET O.poissaoloLukukaudet = O.poissaoloLukukaudet + SP.poissa_lukukaudet
        FROM #Opiskeluaika O
                JOIN #SiirtoOpiskelija_vanhat_poissaolot SP ON SP.opiskeluoikeusid = O.opiskeluoikeusid
     
        -- Poissa olo KUUKAUSISSA, syksyllä, keväällä, koko lukuvuosi        
        UPDATE O
        SET O.poissaoloKuukaudet = ( CASE WHEN O.poissaoloLukukaudet%2 = 0 THEN O.poissaoloLukukaudet*6  --Kokonainen lukuvuosi
                                          WHEN  O.poissaoloLukukaudet = 1 AND MONTH(O.ooAlkamispvm) >= 8 THEN 5    -- Syyskausi
                                          WHEN  O.poissaoloLukukaudet = 1 AND MONTH(O.ooAlkamispvm) <= 7 THEN 7 -- Kevätkausi
                                            
                                          WHEN  O.poissaoloLukukaudet%3 = 0 AND MONTH(O.ooAlkamispvm) >= 8 THEN (O.poissaoloLukukaudet*6 + 5)  -- Syyskausi
                                          WHEN  O.poissaoloLukukaudet%3 = 0 AND MONTH(O.ooAlkamispvm) <= 7 THEN (O.poissaoloLukukaudet*6 + 7)  -- Kevätkausi    
     
                                     END
                                    )
        FROM #Opiskeluaika O
                JOIN #SiirtoOpiskelija_vanhat_poissaolot SP ON SP.opiskeluoikeusid = O.opiskeluoikeusid
                 
         
        -- 0 käytetty aika = 0
        UPDATE O
        SET O.kaytetty_aika_kk = O.kuukausia
           ,   O.KokonaisAika_kk = O.kuukausia    
        FROM #Opiskeluaika O
            JOIN #SiirtoOpiskelija S ON S.opiskelijaid = O.opiskelijaid AND S.opiskeluoikeusid = O.opiskeluoikeusid 
     
        --  siirto-opiskelija
        UPDATE O
        SET   O.KokonaisAika_kk = O.lasnaoloKuukaudet + O.poissaoloKuukaudet         
                   
        FROM #Opiskeluaika O
            JOIN #SiirtoOpiskelija_vanhat_lasnaolot S ON S.opiskelijaid = O.opiskelijaid AND S.opiskeluoikeusid = O.opiskeluoikeusid
     
     
        --  SIIRTO-opiskelija, opintojen käytetty aika läsnä - poissaolo
        UPDATE O
        SET  O.kaytetty_aika_kk = O.KokonaisAika_kk - O.poissaoloKuukaudet
            , O.lukukaudet = O.lasnaoloLukukaudet   
        FROM #Opiskeluaika O
            JOIN #SiirtoOpiskelija_vanhat_poissaolot S ON S.opiskelijaid = O.opiskelijaid AND S.opiskeluoikeusid = O.opiskeluoikeusid
     
     
        -- Loppu siirto-opiskelijat
        ----------------------------------------------------------------------------------------------------------
         
         
        -- POISSA olleet
         
        -- Kuukausissa käytetty aika  
        UPDATE O
        SET O.kaytetty_aika_kk = O.kuukausia
            , O.KokonaisAika_kk = O.kuukausia
        FROM #Opiskeluaika O
            JOIN #PoissaEiSiirto P ON  P.opiskelijaid = O.opiskelijaid AND P.opiskeluoikeusid = O.opiskeluoikeusid 
     
        -- Kuukausissa käytetty aika - poissaolot pois laskettu
        UPDATE O
        SET  O.kaytetty_aika_kk = (O.kaytetty_aika_kk - O.poissaoloKuukaudet)
            , O.lukukaudet = O.lasnaoloLukukaudet        
        FROM #Opiskeluaika O
            JOIN #PoissaEiSiirto P ON  P.opiskelijaid = O.opiskelijaid AND P.opiskeluoikeusid = O.opiskeluoikeusid 
     
             
        -- MUUT , EI POISSA oloja EI  SIIRTO-opiskelija, laskettu heti alussa -- Läsnäolo Lukukaudet, ei siirto-opiskelija, ei poissaoloja
        UPDATE O
        SET  O.KokonaisAika_kk = O.kuukausia
            , O.lukukaudet = O.lasnaoloLukukaudet
        FROM #Opiskeluaika O
        WHERE O.opiskeluoikeusid NOT IN (SELECT P.opiskeluoikeusid FROM #PoissaEiSiirto P) 
        AND   O.opiskeluoikeusid NOT IN (SELECT S.opiskeluoikeusid FROM #SiirtoOpiskelija S)
         
         
        -- SELECT 'lukukaudet 0', * FROM #Opiskeluaika O WHERE O.lukukaudet = 0 OR O.lukukaudet IS NULL
         
    END
     
     
     
    -- YO  Yliopistot
    IF ( @kk_tyyppi = 42 AND @onOOLukukausi = 0) 
    BEGIN    
     
        -- Nopeampi näin kuin suoraan Virta tauluun joini
        INSERT INTO #LasnaolotYO ( opiskelijaid, Alkamispaivamaara, Paattymispaivamaara, db, opiskelijaAvain, Lukukausi_ilmoittautumisen_tilaID   ) 
        SELECT DISTINCT L.OpiskelijaID, L.Alkamispaivamaara, L.Paattymispaivamaara, L.db, O.avain AS OpiskelijaAvain, L.Lukukausi_ilmoittautumisen_tilaID 
        FROM     virta.dbo.Lukukausi_ilmoittautuminen L
                JOIN virta.dbo.Opiskelija O ON O.id = L.OpiskelijaID
                --  
                JOIN #Tutkinnon_suorittaneet T ON T.opiskelijaid = L.OpiskelijaID
                --  
                JOIN #Opiskeluaika OA ON OA.opiskeluoikeusid  = T.opiskeluoikeusid        
        WHERE  L.db = @mydb
        AND O.db = @mydb
        -- Ei tutkinnon jälkeisiä
        AND L.Alkamispaivamaara < T.tutkinnonsuorituspvm
        -- Ei opiskeluoikeuden edeltäviä
        AND L.Paattymispaivamaara > OA.ooAlkamispvm
         
        AND O.id IN (SELECT T.opiskelijaid FROM #Tutkinnon_suorittaneet T WHERE T.opiskelijaid = L.OpiskelijaID)     
     
        CREATE NONCLUSTERED INDEX IX_Lasnaolot_opiskelijaid ON #LasnaolotYO  (opiskelijaid) 
     
     
        -- Lasnaolo Kuukaudet, ei siirto-opiskelija, ei poissaoloja
        UPDATE O
        SET O.lasnaoloKuukaudet =   
                                    (    SELECT sum(DATEDIFF(mm, L2.Alkamispaivamaara, L2.Paattymispaivamaara) +1)
                                        FROM #LasnaolotYO L2 
                                        INNER JOIN virta.dbo.Lukukausi_ilm_tila LT2 ON LT2.id =  L2.Lukukausi_ilmoittautumisen_tilaID
                                        WHERE LT2.Koodi IN ('1','4') -- Läsnä --  
                                        AND L2.db = @mydb
                                        AND L2.OpiskelijaID = O.opiskelijaid  
                                        AND L2.Paattymispaivamaara > O.ooAlkamispvm
                                        AND L2.Paattymispaivamaara  <=  CONVERT(varchar(4), @tutkintoSuoritusVuosi)+'-12-31'   
                                    )
                                      
        FROM #Opiskeluaika O             
                INNER JOIN #LasnaolotYO L ON L.opiskelijaid = O.opiskelijaid
                INNER JOIN virta.dbo.Lukukausi_ilm_tila LT ON LT.id =  L.Lukukausi_ilmoittautumisen_tilaID
        WHERE LT.Koodi IN ('1','4') -- Läsnä -- 2019-05-05
        AND     L.db = @mydb
        AND     O.opiskelijaid NOT IN (SELECT PS.opiskelijaid FROM #PoissaEiSiirto PS)    -- Ei poissaoloja
        AND     O.opiskeluoikeusid NOT IN (SELECT S.opiskeluoikeusid FROM #SiirtoOpiskelija S)  -- Ei siirto-opiskelija
        AND     L.Paattymispaivamaara > O.ooAlkamispvm
        AND     L.Paattymispaivamaara  <=  CONVERT(varchar(4), @tutkintoSuoritusVuosi)+'-12-31'   
         
        -- Läsnäolo Lukukaudet, ei siirto-opiskelija, ei poissaoloja
        UPDATE O
        SET O.lasnaoloLukukaudet =  
                                    (    SELECT count(*) 
                                        FROM #LasnaolotYO L2 
                                        INNER JOIN virta.dbo.Lukukausi_ilm_tila LT2 ON LT2.id =  L2.Lukukausi_ilmoittautumisen_tilaID
                                        WHERE LT2.Koodi IN ('1','4') -- Läsnä --  
                                        AND L2.db = @mydb
                                        AND L2.OpiskelijaID = O.opiskelijaid 
                                        AND L2.Paattymispaivamaara > O.ooAlkamispvm
                                        AND L2.Paattymispaivamaara  <=  CONVERT(varchar(4), @tutkintoSuoritusVuosi)+'-12-31'   
                                    )
                                          
        FROM #Opiskeluaika O            
                INNER JOIN #LasnaolotYO L ON L.OpiskelijaID = O.OpiskelijaID
                INNER JOIN virta.dbo.Lukukausi_ilm_tila LT ON LT.id =  L.Lukukausi_ilmoittautumisen_tilaID
        WHERE LT.Koodi IN ('1','4') -- Läsnä -- 2019-05-05
        AND        L.db = @mydb
        AND         O.opiskelijaid NOT IN (SELECT PS.opiskelijaid FROM #PoissaEiSiirto PS)   -- Ei poissaoloja
        AND     O.opiskeluoikeusid NOT IN (SELECT S.opiskeluoikeusid FROM #SiirtoOpiskelija S)  -- Ei siirto-opiskelija
        AND     L.Paattymispaivamaara > O.ooAlkamispvm
        AND     L.Paattymispaivamaara  <=  CONVERT(varchar(4), @tutkintoSuoritusVuosi)+'-12-31'   
         
        -- Poissaolo Kuukaudet, ei siirto-opiskelija, on poissaoloja
        UPDATE O
        SET O.poissaoloKuukaudet =   
                                    (    SELECT sum(DATEDIFF(mm, L2.Alkamispaivamaara, L2.Paattymispaivamaara) +1)
                                        FROM #LasnaolotYO L2 
                                        INNER JOIN virta.dbo.Lukukausi_ilm_tila LT2 ON LT2.id =  L2.Lukukausi_ilmoittautumisen_tilaID
                                        WHERE LT2.Koodi IN ('2', '3') -- Poissa
                                        AND L2.db = @mydb
                                        AND L2.OpiskelijaID = O.opiskelijaid  
                                        AND L2.Paattymispaivamaara > O.ooAlkamispvm
                                        AND L2.Paattymispaivamaara  <=  CONVERT(varchar(4), @tutkintoSuoritusVuosi)+'-12-31'   
                                    )
                                      
                                     
        FROM #Opiskeluaika O
                INNER JOIN #PoissaEiSiirto P ON P.opiskelijaid = O.opiskelijaid   
                INNER JOIN #LasnaolotYO L ON L.opiskelijaid = P.opiskelijaid
                INNER JOIN virta.dbo.Lukukausi_ilm_tila LT ON LT.id =  L.Lukukausi_ilmoittautumisen_tilaID
        WHERE LT.Koodi IN ('2', '3') -- Poissa
        AND        L.db = @mydb
        AND     L.Paattymispaivamaara > O.ooAlkamispvm
        AND     L.Paattymispaivamaara  <=  CONVERT(varchar(4), @tutkintoSuoritusVuosi)+'-12-31'   
         
         
        -- Poissaolo Lukukaudet, ei siirto-opiskelija, On poissaoloja
        UPDATE O
        SET O.poissaoloLukukaudet =   
                                    (    SELECT count(*) 
                                        FROM #LasnaolotYO L2 
                                        INNER JOIN virta.dbo.Lukukausi_ilm_tila LT2 ON LT2.id =  L2.Lukukausi_ilmoittautumisen_tilaID
                                        WHERE LT2.Koodi IN ('2', '3') -- Poissa
                                        AND L2.db = @mydb
                                        AND L2.OpiskelijaID = O.opiskelijaid  
                                        AND L2.Paattymispaivamaara > O.ooAlkamispvm
                                        AND L2.Paattymispaivamaara  <=  CONVERT(varchar(4), @tutkintoSuoritusVuosi)+'-12-31'   
                                    )     
                                          
        FROM #Opiskeluaika O
                INNER JOIN #PoissaEiSiirto P ON P.opiskelijaid = O.opiskelijaid  
                INNER JOIN #LasnaolotYO L ON L.opiskelijaid = P.opiskelijaid
                INNER JOIN virta.dbo.Lukukausi_ilm_tila LT ON LT.id =  L.Lukukausi_ilmoittautumisen_tilaID
        WHERE LT.Koodi IN ('2', '3') -- Poissa
        AND        L.db = @mydb
        AND     L.Paattymispaivamaara > O.ooAlkamispvm
        AND     L.Paattymispaivamaara  <=  CONVERT(varchar(4), @tutkintoSuoritusVuosi)+'-12-31'   
     
        -- Lasnaolo Kuukaudet, ei siirto-opiskelija, On poissaoloja
        UPDATE O
        SET O.lasnaoloKuukaudet =   
                                    (    SELECT sum(DATEDIFF(mm, L2.Alkamispaivamaara, L2.Paattymispaivamaara) +1)
                                        FROM #LasnaolotYO L2 
                                        INNER JOIN virta.dbo.Lukukausi_ilm_tila LT2 ON LT2.id =  L2.Lukukausi_ilmoittautumisen_tilaID
                                        WHERE LT2.Koodi IN ('1','4') -- Läsnä --  
                                        AND L2.db = @mydb
                                        AND L2.OpiskelijaID = O.opiskelijaid 
                                        AND L2.Paattymispaivamaara > O.ooAlkamispvm
                                        AND L2.Paattymispaivamaara  <=  CONVERT(varchar(4), @tutkintoSuoritusVuosi)+'-12-31'           
                                    )     
                                      
        FROM #Opiskeluaika O             
                INNER JOIN #LasnaolotYO L ON L.opiskelijaid = O.opiskelijaid
                INNER JOIN virta.dbo.Lukukausi_ilm_tila LT ON LT.id =  L.Lukukausi_ilmoittautumisen_tilaID
                INNER JOIN #PoissaEiSiirto P ON P.opiskelijaid = O.opiskelijaid  
        WHERE LT.Koodi IN ('1','4') -- Läsnä --        
        AND O.opiskeluoikeusid NOT IN (SELECT S.opiskeluoikeusid FROM #SiirtoOpiskelija S) -- Ei siirto-opiskelija
        AND        L.db = @mydb
        AND     L.Paattymispaivamaara > O.ooAlkamispvm
        AND     L.Paattymispaivamaara  <=  CONVERT(varchar(4), @tutkintoSuoritusVuosi)+'-12-31'   
         
         
        -- Läsnäolo Lukukaudet, On poissaoloja,  ei siirto-opiskelija, On poissaoloja
        UPDATE O
        SET O.lasnaoloLukukaudet =   
                                    (    SELECT count(*) 
                                        FROM #LasnaolotYO L2 
                                        INNER JOIN virta.dbo.Lukukausi_ilm_tila LT2 ON LT2.id =  L2.Lukukausi_ilmoittautumisen_tilaID
                                        WHERE LT2.Koodi IN ('1','4') -- Läsnä -- 
                                        AND L2.db = @mydb
                                        AND L2.OpiskelijaID = O.opiskelijaid 
                                        AND L2.Paattymispaivamaara > O.ooAlkamispvm
                                        AND L2.Paattymispaivamaara  <=  CONVERT(varchar(4), @tutkintoSuoritusVuosi)+'-12-31'               
                                    )     
                                      
        FROM #Opiskeluaika O            
                INNER JOIN #LasnaolotYO L ON L.opiskelijaid = O.opiskelijaid
                INNER JOIN virta.dbo.Lukukausi_ilm_tila LT ON LT.id =  L.Lukukausi_ilmoittautumisen_tilaID
                INNER JOIN #PoissaEiSiirto P ON P.opiskelijaid = O.opiskelijaid  
        WHERE LT.Koodi IN ('1','4') -- Läsnä -- 2019-05-05     
        AND O.opiskeluoikeusid NOT IN (SELECT S.opiskeluoikeusid FROM #SiirtoOpiskelija  S) -- Ei siirto-opiskelija
        AND        L.db = @mydb
        AND     L.Paattymispaivamaara > O.ooAlkamispvm
        AND     L.Paattymispaivamaara  <=  CONVERT(varchar(4), @tutkintoSuoritusVuosi)+'-12-31'   
         
        --  
        -- SELECT 'oid', * FROM #Opiskeluaika WHERE opiskeluoikeusid = @oid
     
     
        -------------------------------------------------------------------------------------------------------------------
        --- #SiirtoOpiskelijan Läsnäolot  
         
        INSERT INTO #SiirtoOpiskelija_vanhat_lasnaolot (opiskelijaid, opiskeluoikeusid, opintosuoritusid ) 
        SELECT    S.opiskelijaid, S.opiskeluoikeusid, S.opintosuoritusid
        FROM     #SiirtoOpiskelija S
        WHERE     S.opiskeluoikeusid IN  (    SELECT OPL.OpiskeluoikeusID 
                                            FROM  virta.dbo.Op_oik_siir_opisk_liittyva_lukukausi OPL 
                                            JOIN virta.dbo.Lukukausi_ilmoittautuminen L ON L.opiskelijaid = S.opiskelijaid
                                            JOIN virta.dbo.Lukukausi_ilm_tila LT ON LT.ID = L.Lukukausi_ilmoittautumisen_tilaID        
                                            WHERE     OPL.OpiskeluoikeusID = S.opiskeluoikeusid
                                            AND     L.db = @mydb
                                            AND      OPL.db = @mydb
                                            AND        LT.Koodi IN ('1','4') -- Läsnä --   -- Läsnäoloja entisessä                                            
                                    )
     
        CREATE NONCLUSTERED INDEX IX_SiirtoopiskelijaLasna_opiskelijaid ON #SiirtoOpiskelija_vanhat_lasnaolot (opiskeluoikeusid)         
         
     
        -- #SiirtoOpiskelijan läsnäolot    ENNEN SIIRTOA
        UPDATE MY
        SET MY.lasnaolo_lukukaudet = COALESCE(    
                                                    (    SELECT OL.Maara
                                                        FROM virta.dbo.Op_oik_siir_opisk_liittyva_lukukausi OL                                                             
                                                                JOIN virta.dbo.Lukukausi_ilm_tila LT ON LT.id = OL.Lukukausi_ilm_tilaID 
                                                        WHERE OL.OpiskeluoikeusID = MY.opiskeluoikeusid
                                                        AND     OL.db = @mydb
                                                        AND     LT.Koodi IN ('1','4') -- Läsnä --   
                                                    ) 
                                            , 0 ) 
                     
        FROM #SiirtoOpiskelija_vanhat_lasnaolot MY
        WHERE     MY.opiskeluoikeusid IN  (SELECT OPL.OpiskeluoikeusID FROM  virta.dbo.Op_oik_siir_opisk_liittyva_lukukausi OPL WHERE  OPL.db = @mydb AND OPL.OpiskeluoikeusID = MY.opiskeluoikeusid)            
             
         
        -- #SiirtoOpiskelijan Läsnäolo Lukukaudet SIIRRON JÄLKEEN
        UPDATE O
        SET O.lasnaoloLukukaudet = COALESCE(
                                        (    SELECT count(*) 
                                        FROM #LasnaolotYO L2 
                                        INNER JOIN virta.dbo.Lukukausi_ilm_tila LT2 ON LT2.id =  L2.Lukukausi_ilmoittautumisen_tilaID
                                        WHERE LT2.Koodi IN ('1','4') -- Läsnä --  
                                        AND L2.db = @mydb
                                        AND L2.OpiskelijaID = O.opiskelijaid  
                                            )     
                                    , 0 )         
        FROM #Opiskeluaika O            
                INNER JOIN #LasnaolotYO L ON L.opiskelijaid = O.opiskelijaid
                INNER JOIN virta.dbo.Lukukausi_ilm_tila LT ON LT.id =  L.Lukukausi_ilmoittautumisen_tilaID
        WHERE    O.opiskeluoikeusid IN (SELECT S.opiskeluoikeusid FROM #SiirtoOpiskelija S) 
        AND     LT.Koodi IN ('1','4') -- Läsnä -- 2019-05-05
        AND        L.db = @mydb
        AND     L.Paattymispaivamaara > O.ooAlkamispvm
        AND     L.Paattymispaivamaara  <=  CONVERT(varchar(4), @tutkintoSuoritusVuosi)+'-12-31'       
         
        -- Vanhat + uudet läsnäolot Lukukaudet
        UPDATE O
        SET O.lasnaoloLukukaudet = O.lasnaoloLukukaudet + SP.lasnaolo_lukukaudet
            , O.lukukaudet = O.lasnaoloLukukaudet + SP.lasnaolo_lukukaudet
        FROM #Opiskeluaika O
                JOIN #SiirtoOpiskelija_vanhat_lasnaolot SP ON SP.opiskeluoikeusid = O.opiskeluoikeusid
         
        UPDATE O
        SET O.lasnaoloKuukaudet = COALESCE(
                                    ( CASE WHEN O.lasnaoloLukukaudet%2 = 0 THEN O.lasnaoloLukukaudet*6  --Kokonainen lukuvuosi
                                          WHEN  O.lasnaoloLukukaudet = 1 AND MONTH(O.ooAlkamispvm) >= 8 THEN 5    -- Syyskausi
                                          WHEN  O.lasnaoloLukukaudet = 1 AND MONTH(O.ooAlkamispvm) <= 7 THEN 7 -- Kevätkausi
                                            
                                          WHEN  O.lasnaoloLukukaudet%3 = 0 AND MONTH(O.ooAlkamispvm) >= 8 THEN (O.lasnaoloLukukaudet*6 + 5)  -- Syyskausi
                                          WHEN  O.lasnaoloLukukaudet%3 = 0 AND MONTH(O.ooAlkamispvm) <= 7 THEN (O.lasnaoloLukukaudet*6 + 7)  -- Kevätkausi    
     
                                     END
                                    )
                                    , 0 ) 
        FROM #Opiskeluaika O
                JOIN #SiirtoOpiskelija_vanhat_lasnaolot SP ON SP.opiskeluoikeusid = O.opiskeluoikeusid
         
     
        -- #SiirtoOpiskelijan   POISSAOLOT  
        INSERT INTO #SiirtoOpiskelija_vanhat_poissaolot (opiskelijaid, opiskeluoikeusid, opintosuoritusid ) 
        SELECT    S.opiskelijaid, S.opiskeluoikeusid, S.opintosuoritusid
        FROM     #SiirtoOpiskelija S
        WHERE     S.opiskeluoikeusid IN (SELECT OPL.OpiskeluoikeusID 
                                    FROM  virta.dbo.Op_oik_siir_opisk_liittyva_lukukausi OPL 
                                            JOIN virta.dbo.Lukukausi_ilmoittautuminen L ON L.opiskelijaid = S.opiskelijaid
                                            JOIN virta.dbo.Lukukausi_ilm_tila LT ON LT.ID = L.Lukukausi_ilmoittautumisen_tilaID        
                                    WHERE OPL.OpiskeluoikeusID = S.opiskeluoikeusid 
                                    AND     L.db = @mydb
                                    AND        LT.Koodi IN ('2','3')                                 
                                    )
     
        CREATE NONCLUSTERED INDEX IX_SiirtoopiskelijaPoissa_opiskelijaid ON #SiirtoOpiskelija_vanhat_poissaolot (opiskeluoikeusid)     
         
     
        -- #SiirtoOpiskelijan AIEMMAT POISSAOLOT 
        UPDATE MY
        SET MY.poissa_lukukaudet = COALESCE(    
                                            (    SELECT SUM(OL.Maara) 
                                                FROM virta.dbo.Op_oik_siir_opisk_liittyva_lukukausi OL                                                             
                                                        JOIN virta.dbo.Lukukausi_ilm_tila LT ON LT.id = OL.Lukukausi_ilm_tilaID 
                                                WHERE OL.OpiskeluoikeusID = MY.opiskeluoikeusid
                                                AND     OL.db = @mydb
                                                AND     LT.Koodi IN ('2','3') -- Poissa, muu syy  Poissa, ei kuluta opintoaikaa
                                            ) 
                                    , 0 ) 
                                             
        FROM    #SiirtoOpiskelija_vanhat_poissaolot MY
        WHERE     MY.opiskeluoikeusid IN  (SELECT OPL.OpiskeluoikeusID FROM  virta.dbo.Op_oik_siir_opisk_liittyva_lukukausi OPL WHERE OPL.OpiskeluoikeusID = MY.opiskeluoikeusid)
          
         
        -- #SiirtoOpiskelijan Poissaolot SIIRRON JÄLKEEN Lukukaudet
        UPDATE O
        SET O.poissaoloLukukaudet = COALESCE(    
                                    (    SELECT count(*) 
                                        FROM #LasnaolotYO L2 
                                        INNER JOIN virta.dbo.Lukukausi_ilm_tila LT2 ON LT2.id =  L2.Lukukausi_ilmoittautumisen_tilaID
                                        WHERE LT2.Koodi IN ('2','3') -- Poissa
                                        AND L2.db = @mydb
                                        AND L2.OpiskelijaID = O.opiskelijaid  
                                            )    
                                    , 0 )                 
        FROM #Opiskeluaika O            
                INNER JOIN #LasnaolotYO L ON L.opiskelijaid = O.opiskelijaid
                INNER JOIN virta.dbo.Lukukausi_ilm_tila LT ON LT.id =  L.Lukukausi_ilmoittautumisen_tilaID
        WHERE    O.opiskeluoikeusid IN (SELECT S.opiskeluoikeusid FROM #SiirtoOpiskelija S) 
        AND     LT.Koodi IN  ('2','3')  -- Poissa
        AND        L.db = @mydb
        AND     L.Paattymispaivamaara > O.ooAlkamispvm
        AND     L.Paattymispaivamaara  <=  CONVERT(varchar(4), @tutkintoSuoritusVuosi)+'-12-31'       
     
        -- Vanhat ja uudet poissaolot Lukukaudet
        UPDATE O
        SET O.poissaoloLukukaudet = O.poissaoloLukukaudet + SP.poissa_lukukaudet
        FROM #Opiskeluaika O
                JOIN #SiirtoOpiskelija_vanhat_poissaolot SP ON SP.opiskeluoikeusid = O.opiskeluoikeusid
     
        -- Poissa olo KUUKAUSISSA, syksyllä, keväällä, koko lukuvuosi        
        UPDATE O
        SET O.poissaoloKuukaudet = ( CASE WHEN O.poissaoloLukukaudet%2 = 0 THEN O.poissaoloLukukaudet*6  --Kokonainen lukuvuosi
                                          WHEN  O.poissaoloLukukaudet = 1 AND MONTH(O.ooAlkamispvm) >= 8 THEN 5    -- Syyskausi
                                          WHEN  O.poissaoloLukukaudet = 1 AND MONTH(O.ooAlkamispvm) <= 7 THEN 7 -- Kevätkausi
                                            
                                          WHEN  O.poissaoloLukukaudet%3 = 0 AND MONTH(O.ooAlkamispvm) >= 8 THEN (O.poissaoloLukukaudet*6 + 5)  -- Syyskausi
                                          WHEN  O.poissaoloLukukaudet%3 = 0 AND MONTH(O.ooAlkamispvm) <= 7 THEN (O.poissaoloLukukaudet*6 + 7)  -- Kevätkausi    
     
                                     END
                                    )
        FROM #Opiskeluaika O
                JOIN #SiirtoOpiskelija_vanhat_poissaolot SP ON SP.opiskeluoikeusid = O.opiskeluoikeusid
                 
         
        --  käytetty aika  
        UPDATE O
        SET O.kaytetty_aika_kk = O.kuukausia
           ,   O.KokonaisAika_kk = O.kuukausia    
        FROM #Opiskeluaika O
            JOIN #SiirtoOpiskelija S ON S.opiskelijaid = O.opiskelijaid AND S.opiskeluoikeusid = O.opiskeluoikeusid 
     
        --  siirto-opiskelija
        UPDATE O
        SET   O.KokonaisAika_kk = O.lasnaoloKuukaudet + O.poissaoloKuukaudet         
                   
        FROM #Opiskeluaika O
            JOIN #SiirtoOpiskelija_vanhat_lasnaolot S ON S.opiskelijaid = O.opiskelijaid AND S.opiskeluoikeusid = O.opiskeluoikeusid
     
     
        --  SIIRTO-opiskelija, opintojen käytetty aika läsnä - poissaolo
        UPDATE O
        SET  O.kaytetty_aika_kk = O.KokonaisAika_kk - O.poissaoloKuukaudet
            , O.lukukaudet = O.lasnaoloLukukaudet   
        FROM #Opiskeluaika O
            JOIN #SiirtoOpiskelija_vanhat_poissaolot S ON S.opiskelijaid = O.opiskelijaid AND S.opiskeluoikeusid = O.opiskeluoikeusid
     
     
        --  siirto-opiskelijat  Loppu
        ----------------------------------------------------------------------------------------------------------
         
         
        -- POISSA olleet    
        -- Kuukausissa käytetty aika  
        UPDATE O
        SET     O.kaytetty_aika_kk = O.kuukausia
            ,     O.KokonaisAika_kk = O.kuukausia
        FROM     #Opiskeluaika O
            JOIN #PoissaEiSiirto P ON  P.opiskelijaid = O.opiskelijaid AND P.opiskeluoikeusid = O.opiskeluoikeusid 
     
        -- Kuukausissa käytetty aika - poissaolot pois laskettu
        UPDATE     O
        SET      O.kaytetty_aika_kk = (O.kaytetty_aika_kk - O.poissaoloKuukaudet)
            ,     O.lukukaudet = O.lasnaoloLukukaudet        
        FROM     #Opiskeluaika O
            JOIN #PoissaEiSiirto P ON  P.opiskelijaid = O.opiskelijaid AND P.opiskeluoikeusid = O.opiskeluoikeusid 
     
             
        -- MUUT , EI POISSA oloja EI  SIIRTO-opiskelija, laskettu heti alussa -- Läsnäolo Lukukaudet, ei siirto-opiskelija, ei poissaoloja
        UPDATE     O
        SET      O.KokonaisAika_kk = O.kuukausia
                , O.lukukaudet = O.lasnaoloLukukaudet
        FROM #Opiskeluaika O
        WHERE O.opiskeluoikeusid NOT IN (SELECT P.opiskeluoikeusid FROM #PoissaEiSiirto P) 
        AND   O.opiskeluoikeusid NOT IN (SELECT S.opiskeluoikeusid FROM #SiirtoOpiskelija S)
     
     
     
         
     
     
    END


    Poissaoloja
    -- POISSA olleet
     
    -- Kuukausissa käytetty aika  
    UPDATE O
    SET O.kaytetty_aika_kk = O.kuukausia
        , O.KokonaisAika_kk = O.kuukausia
    FROM #Opiskeluaika O
        JOIN #PoissaEiSiirto P ON  P.opiskelijaid = O.opiskelijaid AND P.opiskeluoikeusid = O.opiskeluoikeusid 
    -- Kuukausissa käytetty aika - poissaolot pois laskettu
    UPDATE O
    SET  O.kaytetty_aika_kk = (O.kaytetty_aika_kk - O.poissaoloKuukaudet)
        , O.lukukaudet = O.lasnaoloLukukaudet        
    FROM #Opiskeluaika O
        JOIN #PoissaEiSiirto P ON  P.opiskelijaid = O.opiskelijaid AND P.opiskeluoikeusid = O.opiskeluoikeusid 
         
    -- MUUT , EI POISSA oloja EI  SIIRTO-opiskelija, laskettu heti alussa -- Läsnäolo Lukukaudet, ei siirto-opiskelija, ei poissaoloja
    UPDATE O
    SET  O.KokonaisAika_kk = O.kuukausia
        , O.lukukaudet = O.lasnaoloLukukaudet
    FROM #Opiskeluaika O
    WHERE O.opiskeluoikeusid NOT IN (SELECT P.opiskeluoikeusid FROM #PoissaEiSiirto P) 
    AND   O.opiskeluoikeusid NOT IN (SELECT S.opiskeluoikeusid FROM #SiirtoOpiskelija S)



    8.Siirto-opiskelija, aiemmin käytetyt läsnäolot, poissaolot Opiskeluoikeuden siirtyvä opiskelijan littyvät lukukaudet

    Onko kysessä siirto-opiskelija päätellään sen tiedon mukaan onko Opiskeluoikeuteen joka tutkintosuoritukseen liitetty alkuperäisen opiskeluoikeus päivämäärä Siirtopaivamaara  tyhjä vai ei ( OO.Siirtopaivamaara IS NOT NULL)
    ja aiemmat käytetyt lukukaudet (läsnä-poissaolot) siihen littyvät lukumäärän mukaan. Mikäli siirretty opiskeluoikeus ei näin ole kirjattu ilman siirtopaivamaara tietoa tulee "uuden" opiskeluoikeuden alkamispäivämäärä olla sama kuin alkuperäisen alkamispäivämäärä.


    Siirto-opiskelija
     -------------------------------------------------------------------------------------------------------------------
    --- #SiirtoOpiskelijan Läsnäolot  
     
    INSERT INTO #SiirtoOpiskelija_vanhat_lasnaolot (opiskelijaid, opiskeluoikeusid, opintosuoritusid ) 
    SELECT    S.opiskelijaid, S.opiskeluoikeusid, S.opintosuoritusid
    FROM     #SiirtoOpiskelija S
    WHERE     S.opiskeluoikeusid IN  (    SELECT OPL.OpiskeluoikeusID 
                                        FROM  virta.dbo.Op_oik_siir_opisk_liittyva_lukukausi OPL 
                                        JOIN virta.dbo.Lukukausi_ilmoittautuminen L ON L.opiskelijaid = S.opiskelijaid
                                        JOIN virta.dbo.Lukukausi_ilm_tila LT ON LT.ID = L.Lukukausi_ilmoittautumisen_tilaID        
                                        WHERE     OPL.OpiskeluoikeusID = S.opiskeluoikeusid
                                        AND     L.db = @mydb
                                        AND      OPL.db = @mydb
                                        AND        LT.Koodi IN ('1','4') -- Läsnä --   -- Läsnäoloja entisessä                                            
                                )
     
    CREATE
     NONCLUSTERED INDEX IX_SiirtoopiskelijaLasna_opiskelijaid ON 
    #SiirtoOpiskelija_vanhat_lasnaolot (opiskeluoikeusid)         
     
     
    -- #SiirtoOpiskelijan läsnäolot    ENNEN SIIRTOA
    UPDATE MY
    SET MY.lasnaolo_lukukaudet = COALESCE(    
                                                (    SELECT OL.Maara
                                                    FROM virta.dbo.Op_oik_siir_opisk_liittyva_lukukausi OL                                                             
                                                            JOIN virta.dbo.Lukukausi_ilm_tila LT ON LT.id = OL.Lukukausi_ilm_tilaID 
                                                    WHERE OL.OpiskeluoikeusID = MY.opiskeluoikeusid
                                                    AND     OL.db = @mydb
                                                    AND     LT.Koodi IN ('1','4') -- Läsnä --  
                                                ) 
                                        , 0 ) 
                 
    FROM #SiirtoOpiskelija_vanhat_lasnaolot MY
    WHERE    
     MY.opiskeluoikeusid IN  (SELECT OPL.OpiskeluoikeusID FROM  
    virta.dbo.Op_oik_siir_opisk_liittyva_lukukausi OPL WHERE  OPL.db = @mydb AND OPL.OpiskeluoikeusID = MY.opiskeluoikeusid)            
         
     
    -- #SiirtoOpiskelijan Läsnäolo Lukukaudet SIIRRON JÄLKEEN
    UPDATE O
    SET O.lasnaoloLukukaudet = COALESCE(
                                    (    SELECT count(*) 
                                    FROM #LasnaolotYO L2 
                                    INNER JOIN virta.dbo.Lukukausi_ilm_tila LT2 ON LT2.id =  L2.Lukukausi_ilmoittautumisen_tilaID
                                    WHERE LT2.Koodi IN ('1','4') -- Läsnä --  
                                    AND L2.db = @mydb
                                    AND L2.OpiskelijaID = O.opiskelijaid  
                                        )     
                                , 0 )         
    FROM #Opiskeluaika O            
            INNER JOIN #LasnaolotYO L ON L.opiskelijaid = O.opiskelijaid
            INNER JOIN virta.dbo.Lukukausi_ilm_tila LT ON LT.id =  L.Lukukausi_ilmoittautumisen_tilaID
    WHERE    O.opiskeluoikeusid IN (SELECT S.opiskeluoikeusid FROM #SiirtoOpiskelija S) 
    AND     LT.Koodi IN ('1','4') -- Läsnä -- 2019-05-05
    AND        L.db = @mydb
    AND     L.Paattymispaivamaara > O.ooAlkamispvm
    AND     L.Paattymispaivamaara  <=  CONVERT(varchar(4), @tutkintoSuoritusVuosi)+'-12-31'       
     
    -- Vanhat + uudet läsnäolot Lukukaudet
    UPDATE O
    SET O.lasnaoloLukukaudet = O.lasnaoloLukukaudet + SP.lasnaolo_lukukaudet
        , O.lukukaudet = O.lasnaoloLukukaudet + SP.lasnaolo_lukukaudet
    FROM #Opiskeluaika O
            JOIN #SiirtoOpiskelija_vanhat_lasnaolot SP ON SP.opiskeluoikeusid = O.opiskeluoikeusid
     
    UPDATE O
    SET O.lasnaoloKuukaudet = COALESCE(
                                ( CASE WHEN O.lasnaoloLukukaudet%2 = 0 THEN O.lasnaoloLukukaudet*6  --Kokonainen lukuvuosi
                                      WHEN  O.lasnaoloLukukaudet = 1 AND MONTH(O.ooAlkamispvm) >= 8 THEN 5    -- Syyskausi
                                      WHEN  O.lasnaoloLukukaudet = 1 AND MONTH(O.ooAlkamispvm) <= 7 THEN 7 -- Kevätkausi
                                        
                                      WHEN  O.lasnaoloLukukaudet%3 = 0 AND MONTH(O.ooAlkamispvm) >= 8 THEN (O.lasnaoloLukukaudet*6 + 5)  -- Syyskausi
                                      WHEN  O.lasnaoloLukukaudet%3 = 0 AND MONTH(O.ooAlkamispvm) <= 7 THEN (O.lasnaoloLukukaudet*6 + 7)  -- Kevätkausi    
     
                                 END
                                )
                                , 0 ) 
    FROM #Opiskeluaika O
            JOIN #SiirtoOpiskelija_vanhat_lasnaolot SP ON SP.opiskeluoikeusid = O.opiskeluoikeusid
     
     
    -- #SiirtoOpiskelijan   POISSAOLOT  
    INSERT INTO #SiirtoOpiskelija_vanhat_poissaolot (opiskelijaid, opiskeluoikeusid, opintosuoritusid ) 
    SELECT    S.opiskelijaid, S.opiskeluoikeusid, S.opintosuoritusid
    FROM     #SiirtoOpiskelija S
    WHERE     S.opiskeluoikeusid IN (SELECT OPL.OpiskeluoikeusID 
                                FROM  virta.dbo.Op_oik_siir_opisk_liittyva_lukukausi OPL 
                                        JOIN virta.dbo.Lukukausi_ilmoittautuminen L ON L.opiskelijaid = S.opiskelijaid
                                        JOIN virta.dbo.Lukukausi_ilm_tila LT ON LT.ID = L.Lukukausi_ilmoittautumisen_tilaID        
                                WHERE OPL.OpiskeluoikeusID = S.opiskeluoikeusid 
                                AND     L.db = @mydb
                                AND        LT.Koodi IN ('2','3')                                 
                                )
     
    CREATE NONCLUSTERED INDEX IX_SiirtoopiskelijaPoissa_opiskelijaid ON #SiirtoOpiskelija_vanhat_poissaolot (opiskeluoikeusid)     
     
     
    -- #SiirtoOpiskelijan AIEMMAT POISSAOLOT 
    UPDATE MY
    SET MY.poissa_lukukaudet = COALESCE(    
                                        (    SELECT SUM(OL.Maara) 
                                            FROM virta.dbo.Op_oik_siir_opisk_liittyva_lukukausi OL                                                             
                                                    JOIN virta.dbo.Lukukausi_ilm_tila LT ON LT.id = OL.Lukukausi_ilm_tilaID 
                                            WHERE OL.OpiskeluoikeusID = MY.opiskeluoikeusid
                                            AND     OL.db = @mydb
                                            AND     LT.Koodi IN ('2','3') -- Poissa, muu syy  Poissa, ei kuluta opintoaikaa
                                        ) 
                                , 0 ) 
                                         
    FROM    #SiirtoOpiskelija_vanhat_poissaolot MY
    WHERE    
     MY.opiskeluoikeusid IN  (SELECT OPL.OpiskeluoikeusID FROM  
    virta.dbo.Op_oik_siir_opisk_liittyva_lukukausi OPL WHERE 
    OPL.OpiskeluoikeusID = MY.opiskeluoikeusid)
      
     
    -- #SiirtoOpiskelijan Poissaolot SIIRRON JÄLKEEN Lukukaudet
    UPDATE O
    SET O.poissaoloLukukaudet = COALESCE(    
                                (    SELECT count(*) 
                                    FROM #LasnaolotYO L2 
                                    INNER JOIN virta.dbo.Lukukausi_ilm_tila LT2 ON LT2.id =  L2.Lukukausi_ilmoittautumisen_tilaID
                                    WHERE LT2.Koodi IN ('2','3') -- Poissa
                                    AND L2.db = @mydb
                                    AND L2.OpiskelijaID = O.opiskelijaid  
                                        )    
                                , 0 )                 
    FROM #Opiskeluaika O            
            INNER JOIN #LasnaolotYO L ON L.opiskelijaid = O.opiskelijaid
            INNER JOIN virta.dbo.Lukukausi_ilm_tila LT ON LT.id =  L.Lukukausi_ilmoittautumisen_tilaID
    WHERE    O.opiskeluoikeusid IN (SELECT S.opiskeluoikeusid FROM #SiirtoOpiskelija S) 
    AND     LT.Koodi IN  ('2','3')  -- Poissa
    AND        L.db = @mydb
    AND     L.Paattymispaivamaara > O.ooAlkamispvm
    AND     L.Paattymispaivamaara  <=  CONVERT(varchar(4), @tutkintoSuoritusVuosi)+'-12-31'       
     
    -- Vanhat ja uudet poissaolot Lukukaudet
    UPDATE O
    SET O.poissaoloLukukaudet = O.poissaoloLukukaudet + SP.poissa_lukukaudet
    FROM #Opiskeluaika O
            JOIN #SiirtoOpiskelija_vanhat_poissaolot SP ON SP.opiskeluoikeusid = O.opiskeluoikeusid
     
    -- Poissa olo KUUKAUSISSA, syksyllä, keväällä, koko lukuvuosi        
    UPDATE O
    SET O.poissaoloKuukaudet = ( CASE WHEN O.poissaoloLukukaudet%2 = 0 THEN O.poissaoloLukukaudet*6  --Kokonainen lukuvuosi
                                      WHEN  O.poissaoloLukukaudet = 1 AND MONTH(O.ooAlkamispvm) >= 8 THEN 5    -- Syyskausi
                                      WHEN  O.poissaoloLukukaudet = 1 AND MONTH(O.ooAlkamispvm) <= 7 THEN 7 -- Kevätkausi
                                        
                                      WHEN  O.poissaoloLukukaudet%3 = 0 AND MONTH(O.ooAlkamispvm) >= 8 THEN (O.poissaoloLukukaudet*6 + 5)  -- Syyskausi
                                      WHEN  O.poissaoloLukukaudet%3 = 0 AND MONTH(O.ooAlkamispvm) <= 7 THEN (O.poissaoloLukukaudet*6 + 7)  -- Kevätkausi    
     
                                 END
                                )
    FROM #Opiskeluaika O
            JOIN #SiirtoOpiskelija_vanhat_poissaolot SP ON SP.opiskeluoikeusid = O.opiskeluoikeusid
             
     
    --  käytetty aika  
    UPDATE O
    SET O.kaytetty_aika_kk = O.kuukausia
       ,   O.KokonaisAika_kk = O.kuukausia    
    FROM #Opiskeluaika O
        JOIN #SiirtoOpiskelija S ON S.opiskelijaid = O.opiskelijaid AND S.opiskeluoikeusid = O.opiskeluoikeusid 
     
    --  siirto-opiskelija
    UPDATE O
    SET   O.KokonaisAika_kk = O.lasnaoloKuukaudet + O.poissaoloKuukaudet         
               
    FROM #Opiskeluaika O
        JOIN #SiirtoOpiskelija_vanhat_lasnaolot S ON S.opiskelijaid = O.opiskelijaid AND S.opiskeluoikeusid = O.opiskeluoikeusid
     
     
    --  SIIRTO-opiskelija, opintojen käytetty aika läsnä - poissaolo
    UPDATE O
    SET  O.kaytetty_aika_kk = O.KokonaisAika_kk - O.poissaoloKuukaudet
        , O.lukukaudet = O.lasnaoloLukukaudet   
    FROM #Opiskeluaika O
        JOIN #SiirtoOpiskelija_vanhat_poissaolot S ON S.opiskelijaid = O.opiskelijaid AND S.opiskeluoikeusid = O.opiskeluoikeusid
     
     
    --  siirto-opiskelijat  Loppu
    ----------------------------------------------------------------------------------------------------------



    9. Kerätään yhteen ja lasketaan onko tutkinto suoritettu määräajassa:

    käytetyt läsnälukukaudet <= tavoiteaika lukukausissa
       tai
    opiskeluaika kuukausissa (poislaskettu ajasta poissaoloaika kuukausissa) <= tavoiteaika kuukausissa


    tavoiteajassa kyllä ei

    CASE             -- Jos käytetty läsnäkaudet alle tai sama kuin tavoiteaika lukukausien määrä
                  WHEN  O.lukukaudet > 0AND O.lukukaudet <= TA.tavoiteaika_lukukausia        THEN 1
                  
                          -- Jos aika kuukausissa alle tai sama kuin tavoiteaika kuukausien määrä                               
                  WHEN  O.kaytetty_aika_kk > 0AND O.kaytetty_aika_kk <= TA.tavoiteaika_kuukausia     THEN 1
                      
                 ELSE 0
                       
              END
          AS tavoite_ajassa_valmistunut

    O.lukukaudet = käytetty läsnälukukaudet (Lukukausi ilmoittautumiset, tila 1=Läsnä)

    O.kaytetty_aika_kk = opiskeluoikeuteen käytetty aika (opiskeluoikeus alkamispvm - tutkinnon suorituspvm ) poislaskettu mahdollinen poissaoloaika (2=poissa,3=poissa, ei kuluta opintoaikaa)

    TA.tavoiteaika_lukukausia = tavoite_lukukaudet 4.Poimintakuvaus taulukossa

    TA.tavoiteaika_kuukausia = tavoite_kuukaudet 4.Poimintakuvaus taulukossa

    tavoite_ajassa_valmistunut

    1 = Kyllä. Valmistunut tavoiteajassa

    0 = Ei. Ei valmistunut tavoiteajassa







    Tavoiteajassa
    SELECT DISTINCT @mydb AS kk, @oppilaitosnro AS oppilaitosnro, T.opiskelijaAvain, T.opiskeluoikeusAvain, T.opintosuoritusAvain, T.tutkintokoodi, O.ooAlkamispvm, T.tutkinnonsuorituspvm 
             
            , TA.vaadittu_op
            , TA.tavoiteaika_lukukausia -- Tavoiteaika lukukausissa
             
            , O.lukukaudet           
             
            , O.lasnaoloLukukaudet    -- Läsnäolo lukukausia
            , O.lasnaoloKuukaudet   -- Läsnäolo kuukausia
             
            , O.poissaoloLukukaudet -- Poissaolo lukukausia
            , O.poissaoloKuukaudet    -- Poissaolo kuukausia
             
            , TA.tavoiteaika_kuukausia    -- Tavoiteaika kuukausissa
            , O.kaytetty_aika_kk  -- Kaytetty aika kuukausissa
            , O.KokonaisAika_kk        -- Läsnä ja poissaolo
            , @tutkintoSuoritusVuosi         -- tutkintovuosi
            , TA.vaadittu_op/60.0 AS tavoiteaika_vuosia        
             
            , CASE             -- Jos käytetty läsnäkaudet alle tai sama kuin tavoiteaika lukukausien määrä
                    WHEN  O.lukukaudet > 0 AND O.lukukaudet <= TA.tavoiteaika_lukukausia        THEN 1
                     
                            -- Jos aika kuukausissa alle tai sama kuin tavoiteaika kuukausien määrä                                
                    WHEN  O.kaytetty_aika_kk > 0 AND O.kaytetty_aika_kk <= TA.tavoiteaika_kuukausia     THEN 1               
                         
                   ELSE 0
                          
                END 
                AS tavoite_ajassa_valmistunut
     
             , HT.ika
             , HT.sukupuoli
                      
            , HT.on_aiempi_tutkinto
             
            , ( SELECT 1 FROM virta.dbo.Opiskeluoikeus WHERE Siirtopaivamaara IS NOT NULL AND id = T.opiskeluoikeusid ) siirto_opiskelija
     
             
    FROM  #Tutkinnon_suorittaneet T 
            JOIN #Opiskeluaika O ON O.opiskelijaid = T.opiskelijaid AND O.opiskeluoikeusid = T.opiskeluoikeusid AND O.opintosuoritusid = T.opintosuoritusid
            JOIN #Tavoiteaika TA ON TA.vaadittu_op = T.vaadittu_tutkinnon_laajuus_op
            JOIN #HenkiloTiedot HT ON HT.opiskelijaid = T.opiskelijaid AND HT.tutkinnonsuorituspvm = T.tutkinnonsuorituspvm



    10. Ryhmäkohtaiset kertoimet

    Tutkinto suoritettu määräajassa: kerroin 1,5
    Tutkinto suoritettu enintään 12 kuukautta määräajan jälkeen: 1,3
    Tutkinto suoritettu yli 12 kuukautta määräajan jälkeen: 1

    Mikäli tutkinnon suorittaja on aiemmin suorittanut suomalaisessa korkeakoulussa samantasoisen tutkinnon, painotetaan ko. tutkintoa kertoimella 0,7.

    Ryhmäkohtaiset kertoimet

    ryhmä A: kerroin 1
    ryhmä B: kerroin 1,75
    ryhmä C: kerroin 3

    Kertoimet
    -- T.tutkintokerroin alkuarvo default 1
     
     -- Tutkinto suoritettu tavoiteajassa: kerroin 1,5
     UPDATE T
     SET T.tutkintokerroin = T.tutkintokerroin * 1.5
     FROM tavoiteajassa_valmistuneet T
     WHERE  T.tavoite_ajassa_valmistunut = 1
     
     -- Tutkinto suoritettu enintään enintään 12 kk yli: 1,3
     -- Kertoinset = 1 tilastointia varten
     UPDATE T 
     SET     T.kertoinSet = 1
            , T.tutkintokerroin = T.tutkintokerroin * 1.3
     FROM tavoiteajassa_valmistuneet T
     WHERE ( T.kaytetty_aika_kk - T.tavoiteaika_kuukausia) <=  12
     AND ( T.kaytetty_aika_kk - T.tavoiteaika_kuukausia) > 0
     AND T.tavoite_ajassa_valmistunut = 0
     AND  T.kertoinSet = 0
     
     -- Tutkinto suoritettu enintään enintään 2 lukukautta yli: 1,3
     -- Kertoinset = 2 tilastointia varten montako ei ollut kertoinset 2
     UPDATE T
     SET T.kertoinSet = 2   
            , T.tutkintokerroin = T.tutkintokerroin * 1.3
     FROM tavoiteajassa_valmistuneet T
     WHERE ( T.lasnaoloLukukaudet - T.tavoite_lukukaudet) <=  2
     AND ( T.lasnaoloLukukaudet - T.tavoite_lukukaudet) > 0
     AND  T.tavoite_ajassa_valmistunut = 0
     AND  T.kertoinSet = 0
     
     
     --Tutkinto suoritettu yli 12 kk yli: 1,0
    UPDATE T
    SET T.tutkintokerroin = T.tutkintokerroin * 1.0
    FROM tavoiteajassa_valmistuneet T
    WHERE ( T.kaytetty_aika_kk - T.tavoiteaika_kuukausia) >  12
    AND T.tavoite_ajassa_valmistunut = 0
     
    -- Mikäli tutkinnon suorittaja on aiemmin suorittanut suomalaisessa korkeakoulussa samantasoisen tutkinnon, painotetaan ko. tutkintoa kertoimella 0,7 aiempi tutkinto
    UPDATE T
    SET T.tutkintokerroin = T.tutkintokerroin * 0.7
    FROM tavoiteajassa_valmistuneet T
    WHERE  T.on_aiempi_tutkinto = 1
     
    -- Ryhmä A
    UPDATE T
    SET T.tutkintokerroin = T.tutkintokerroin * 1
    FROM tavoiteajassa_valmistuneet T
    WHERE  T.tutkintokoodi IN (SELECT koodi FROM [tavoiteajassa_tutkintoryhmat] WHERE ryhma = 'A')
     
    -- Ryhmä B
    UPDATE T
    SET T.tutkintokerroin = T.tutkintokerroin * 1.75
    FROM tavoiteajassa_valmistuneet T
    WHERE  T.tutkintokoodi IN (SELECT koodi FROM [tavoiteajassa_tutkintoryhmat] WHERE ryhma = 'B')
     
    -- Ryhmä C
    UPDATE T
    SET T.tutkintokerroin = T.tutkintokerroin * 3
    FROM tavoiteajassa_valmistuneet T
    WHERE  T.tutkintokoodi IN (SELECT koodi FROM [tavoiteajassa_tutkintoryhmat] WHERE ryhma = 'C')
     
     
    --Tutkinto suoritettu enintään enintään 12 kk yli: 1,3
     UPDATE T
     SET T.on_enintaan_12kk = 1
        , T.on_yli_12kk = 0
     FROM tavoiteajassa_valmistuneet T
     WHERE ( T.kaytetty_aika_kk - T.tavoiteaika_kuukausia) <=  12
     AND ( T.kaytetty_aika_kk - T.tavoiteaika_kuukausia) > 0
     AND T.tavoite_ajassa_valmistunut = 0
     
    --Tutkinto suoritettu yli 12 kk yli: 1,0
    UPDATE T
    SET T.on_yli_12kk = 1
        ,T.on_enintaan_12kk = 0
    FROM tavoiteajassa_valmistuneet T
    WHERE ( T.kaytetty_aika_kk - T.tavoiteaika_kuukausia) >  12
    AND T.tavoite_ajassa_valmistunut = 0
     
    -- Ryhmä A
    UPDATE T
    SET T.on_ryhma_A = 1
        ,T.on_ryhma_B = 0
        ,T.on_ryhma_C = 0
    FROM tavoiteajassa_valmistuneet T
    WHERE  T.tutkintokoodi IN (SELECT koodi FROM [tavoiteajassa_tutkintoryhmat] WHERE ryhma = 'A')
     
    -- Ryhmä B
    UPDATE T
    SET T.on_ryhma_B = 1
        ,T.on_ryhma_A = 0
        ,T.on_ryhma_C = 0
    FROM tavoiteajassa_valmistuneet T
    WHERE  T.tutkintokoodi IN (SELECT koodi FROM [tavoiteajassa_tutkintoryhmat] WHERE ryhma = 'B')
     
     
    -- Ryhmä C
    UPDATE T
    SET T.on_ryhma_C = 1
        ,T.on_ryhma_A = 0
        ,T.on_ryhma_B = 0
    FROM tavoiteajassa_valmistuneet T
    WHERE  T.tutkintokoodi IN (SELECT koodi FROM [tavoiteajassa_tutkintoryhmat] WHERE ryhma = 'C')

     



    11. Viedään tulosdata kuutioon, raportille:  https://extra.vipunen.fi/Raportit/Tavoiteajassa%20tutkinnon%20suorittaneet(luonnos).xlsb?Web=1

    Tilastokeskuksen tutkintokoodin avulla koulutusluokittelu, koulutusaste, ala, okm ohjauksen ala ynm.


  • No labels

1 Comment

  1. Fredrik Finnberg

    30.3.2020 Korjattu siirto-opiskelijoiden aiemmat poissaolot laskennan virhe