Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
titleCIMO lyhyt saapuva
collapsetrue
 -- CIMO_lyhyt_saapuva:

DECLARE    @vuosi varchar(4)
SET @vuosi = '2016'

create table #param (
    vuosi varchar(4),
)
;
insert into #param (vuosi)
    select
    @vuosi as vuosi
;

-- Temp-taulu tiedonkeruun tietoja varten
create table #cimopisk (
    oppilaitos varchar(5), -- Oppilaitoskoodi
    hetu varchar(100), --henkilö- tai muu tunnus
    sp varchar(1), -- sukupuoli
    koulutusala varchar(4), -- koulutusala
    opintoaste varchar(1), -- (vain YO)
    lahtomaa varchar(3),
    kesto varchar(4), --liikkuvuuden kesto
    koultyp varchar(1), --koulutuksen tyyppi (vain AMK)
    tyyppi varchar(2), --liikkuvuuden tyyppi
    --
    jakso_alkupvm date,
    jakso_loppupvm date,
    koulutuskoodi varchar(6),
    --
    opiskelijaavain varchar(100),
    liikkuvuusjaksoavain varchar(100),
    opiskeluoikeusavain varchar(100),
    opiskelija_id int,
    liikkuvuusjakso_id int,
    opiskeluoikeus_id int
)
;
CREATE NONCLUSTERED INDEX IX_cimopisk_opiskelija_id ON #cimopisk (opiskelija_id)
CREATE NONCLUSTERED INDEX IX_cimopisk_liikkuvuusjakso_id ON #cimopisk (liikkuvuusjakso_id)
CREATE NONCLUSTERED INDEX IX_cimopisk_opiskeluoikeus_id ON #cimopisk (opiskeluoikeus_id)
;

print convert(varchar,getdate(),120)+' CREATE temp-taulu param ja cimopisk'
;

---
-- Lisätään perustiedot (henkilö, opiskelija)
-- * täytyy olla liikkuvuusjakso joka on
--   - jonka (liikkuvuuden )suunta on 2=Saapuva
--   - kestänyt enintään [5,7] ja vähintään 86 (87-1) päivää
-- * jakson aloituspäivämäärän vuosi on tilastovuosi
---

INSERT into #cimopisk (
    -- kaikki sarakkeet (kopioitavaksi)
    oppilaitos,hetu,sp,koulutusala,opintoaste,lahtomaa,kesto,koultyp,tyyppi
    ,jakso_alkupvm,jakso_loppupvm,koulutuskoodi
    ,opiskelijaavain,liikkuvuusjaksoavain,opiskeluoikeusavain,opiskelija_id,liikkuvuusjakso_id,opiskeluoikeus_id
)

SELECT DISTINCT 
 oppilaitos = (select OrganisaatioKoodi from Yhteiset.Asetukset.Instanssit where DB=h.DB)
,hetu = h.Henkilotunnus
,sp = (select top 1 k.Koodi from virta.dbo.Sukupuoli k where k.ID=h.SukupuoliID)
,koulutusala = null
,opintoaste = null
,lahtomaa = (select top 1 k.Koodi from virta.dbo.Maa k where k.ID=lj.MaaID)
,kesto = cast(coalesce(DATEDIFF(day,lj.Alkamispaivamaara,lj.Paattymispaivamaara),9999) as varchar) +1 -- alku- ja loppupvm kuuluu mukaan
,koultyp = null
,tyyppi = (select top 1 k.Koodi from virta.dbo.Liikkuvuuden_tyyppi k where k.ID=lj.Liikkuvuuden_tyyppiID)
--
,jakso_alkupvm = lj.Alkamispaivamaara
,jakso_loppupvm = lj.Paattymispaivamaara
,koulutuskoodi = null
--
,opiskelijaavain = p.Avain
,liikkuvuusjaksoavain = lj.Avain
,opiskeluoikeusavain = (select avain from virta.dbo.Opiskeluoikeus where ID=lj.OpiskeluoikeusID)
,opiskelija_id = p.ID
,liikkuvuusjakso_id = lj.ID
,opiskeluoikeus_id = lj.OpiskeluoikeusID -- voi olla null!

FROM virta.dbo.Henkilo h
inner join virta.dbo.Opiskelija p on p.HenkiloID=h.ID
inner join virta.dbo.Liikkuvuusjakso lj on lj.OpiskelijaID=p.ID
    inner join virta.dbo.Opiskeluoikeus OO ON OO.OpiskelijaID = lj.OpiskelijaID
    inner join virta.dbo.Opiskeluoikeuden_tyyppi otk on otk.ID = OO.Op_oikeuden_tyyppiID  -- KV vaihto tyyppi , Ei Liikkuvuusjakson opiskeluoikeustyyppi
    
WHERE 1=1
AND otk.koodi = '9' -- Kansainvälinen vaihto

-- suunta 2=Saapuva
and 2 = (select top 1 k.Koodi from virta.dbo.Liikkuvuuden_suunta k where k.ID=lj.Liikkuvuuden_suuntaID)
-- enintään [5,7] ja vähintään 86 päivää
and coalesce(DATEDIFF(day,lj.Alkamispaivamaara,lj.Paattymispaivamaara),9999) +1 -- alku- ja loppupvm kuuluu mukaan
    between 5 and 86
-- tilastovuosi
and year(lj.Alkamispaivamaara) = (select vuosi from #param)


-- Saapuva jolla on myös tutkinto-oikeus on double degree?
AND    p.id NOT IN (

            SELECT OO2.opiskelijaid     
            FROM virta.dbo.Opiskeluoikeus OO2 
                inner join virta.dbo.Opiskeluoikeuden_tyyppi otk2 on otk2.ID = OO2.Op_oikeuden_tyyppiID  
                INNER JOIN virta.dbo.Opiskeluoikeusjakso OJ2 on OJ2.OpiskeluoikeusID=OO2.id
            WHERE     otk2.koodi IN ('1','2','3','4','5','6','7','14','15','19')
            
            AND lj.Alkamispaivamaara BETWEEN OO2.Alkamispaivamaara AND COALESCE(OO2.Paattymispaivamaara, @vuosi + '-12-31')
            and year(lj.Alkamispaivamaara) = (select vuosi from #param)
            )
;

print convert(varchar,getdate(),120)+' liikkuvuus- ja opiskelijatiedot'
;


-- Lyhyt saapuva ilman opiskeluoikeutta

INSERT into #cimopisk (    
    oppilaitos,hetu,sp,koulutusala,opintoaste,lahtomaa,kesto,koultyp,tyyppi
    ,jakso_alkupvm,jakso_loppupvm,koulutuskoodi
    ,opiskelijaavain,liikkuvuusjaksoavain,opiskeluoikeusavain,opiskelija_id,liikkuvuusjakso_id,opiskeluoikeus_id
)

SELECT  DISTINCT 
 oppilaitos = (select OrganisaatioKoodi from Yhteiset.Asetukset.Instanssit where DB=h.DB)
,hetu = h.Henkilotunnus
,sp = (select top 1 k.Koodi from virta.dbo.Sukupuoli k where k.ID=h.SukupuoliID)
,koulutusala = null
,opintoaste = null
,lahtomaa = (select top 1 k.Koodi from virta.dbo.Maa k where k.ID=lj.MaaID)
,kesto = cast(coalesce(DATEDIFF(day,lj.Alkamispaivamaara,lj.Paattymispaivamaara),9999) as varchar) +1 -- alku- ja loppupvm kuuluu mukaan
,koultyp = null
,tyyppi = (select top 1 k.Koodi from virta.dbo.Liikkuvuuden_tyyppi k where k.ID=lj.Liikkuvuuden_tyyppiID)
--
,jakso_alkupvm = lj.Alkamispaivamaara
,jakso_loppupvm = lj.Paattymispaivamaara
,koulutuskoodi = null
--
,opiskelijaavain = p.Avain
,liikkuvuusjaksoavain = lj.Avain
,opiskeluoikeusavain = (select avain from virta.dbo.Opiskeluoikeus where ID=lj.OpiskeluoikeusID)
,opiskelija_id = p.ID
,liikkuvuusjakso_id = lj.ID
,opiskeluoikeus_id = lj.OpiskeluoikeusID -- voi olla null!

FROM virta.dbo.Henkilo h
        inner join virta.dbo.Opiskelija p on p.HenkiloID=h.ID
        inner join virta.dbo.Liikkuvuusjakso lj on lj.OpiskelijaID=p.ID    
WHERE 
        p.ID NOT IN (SELECT C.opiskelija_id FROM #cimopisk C)

-- suunta 2=Saapuva
and 2 = (select top 1 k.Koodi from virta.dbo.Liikkuvuuden_suunta k where k.ID=lj.Liikkuvuuden_suuntaID)
-- enintään [5,7] ja vähintään 86 päivää
and coalesce(DATEDIFF(day,lj.Alkamispaivamaara,lj.Paattymispaivamaara),9999) +1 -- alku- ja loppupvm kuuluu mukaan
    between 5 and 86
-- tilastovuosi
and year(lj.Alkamispaivamaara) = (select vuosi from #param)

-- Saapuva jolla on myös tutkinto-oikeus on double degree?
AND    p.id NOT IN (

            SELECT OO2.opiskelijaid     
            FROM virta.dbo.Opiskeluoikeus OO2 
                inner join virta.dbo.Opiskeluoikeuden_tyyppi otk2 on otk2.ID = OO2.Op_oikeuden_tyyppiID  
                INNER JOIN virta.dbo.Opiskeluoikeusjakso OJ2 on OJ2.OpiskeluoikeusID=OO2.id
            WHERE     otk2.koodi IN ('1','2','3','4','5','6','7','14','15','19')
            
            AND lj.Alkamispaivamaara BETWEEN OO2.Alkamispaivamaara AND COALESCE(OO2.Paattymispaivamaara, @vuosi + '-12-31')
            and year(lj.Alkamispaivamaara) = (select vuosi from #param)
            )

;

---
-- Opiskeluoikeustiedot
---
/*
    koulutusala varchar(4), -- koulutusala // OKMOhjausala
    opintoaste varchar(1), -- (vain YO) // 1, 2 tai 3 // Opiskeluoikeus.Tyyppi 2,4,6,7
    koultyp varchar(1), --koulutuksen tyyppi (vain AMK) // 1,2, tai 6 // OpiskeluoikeusTyyppi 1,3
*/

-- valitaan yksi per opiskelija, jos ei löytynyt jo ID yllä!
update T
set opiskeluoikeus_id=o.ID, opiskeluoikeusavain=o.avain
from #cimopisk T
inner join virta.dbo.Opiskeluoikeus o on o.OpiskelijaID=T.opiskelija_id
inner join virta.dbo.Op_oikeuden_ensisijaisuus oe on oe.OpiskeluoikeusID=o.ID
where 1=1
-- ensisijainen alkamispäivänä
and T.jakso_alkupvm between oe.Alkamispaivamaara and coalesce(oe.Paattymispaivamaara,'9999-9-9')
;

-- koulutuskoodi
update T
set koulutuskoodi=(select k.Koodi from virta.dbo.Tutkintonimike k where k.ID=oj.TutkintonimikeID)
from #cimopisk T
inner join virta.dbo.Opiskeluoikeusjakso oj on oj.OpiskeluoikeusID=T.opiskeluoikeus_id
where T.opiskeluoikeus_id is not null
-- jakso voimassa alkupäivänä
and T.jakso_alkupvm between oj.Alkamispaivamaara and coalesce(oj.Paattymispaivamaara,'9999-01-01')
;

-- koulutusala
-- nb! OKM:n ohjauksen ala
update T
set koulutusala=k.Koodi
from #cimopisk T
    inner join virta.dbo.Liikkuvuusjakso L ON L.OpiskelijaID =T.opiskelija_id
    inner join virta.dbo.Opiskeluoikeus OO ON OO.OpiskelijaID = L.OpiskelijaID AND OO.ID = T.opiskeluoikeus_id
    inner join virta.dbo.Koulutusala K ON K.id = OO.KoulutusalaID    
where T.opiskeluoikeus_id is not null   AND T.opiskelija_id is not null  
AND K.Versio = 'ohjausala'
;

update T
set koulutusala=k.Koodi
from #cimopisk T
    inner join virta.dbo.Liikkuvuusjakso L ON L.OpiskelijaID =T.opiskelija_id
    inner join virta.dbo.Opiskeluoikeus OO ON OO.OpiskelijaID = L.OpiskelijaID
    inner join virta.dbo.Koulutusala K ON K.id = OO.KoulutusalaID    
where T.koulutusala is null  AND T.opiskelija_id is not null  
AND K.Versio = 'ohjausala'
;



-- opintoaste, koultyp
update T
set opintoaste=(
    case otk.Koodi
    when '2' then '1'
    when '4' then '2'
    when '6' then '3'
    when '7' then '3'
    end
)
,koultyp=(
    case otk.Koodi
    
    when '1' then '1' -- Ammattikorkeakoulututkinto
    when '3' then '6' -- Ylempi ammattikorkeakoulututkinto
     
    end
)
from #cimopisk T
    inner join virta.dbo.Liikkuvuusjakso L on L.OpiskelijaID = T.opiskelija_id    
    inner join virta.dbo.opiskeluoikeus OO ON T.opiskeluoikeus_id = OO.id
    inner join virta.dbo.Opiskeluoikeuden_tyyppi otk on otk.ID = L.Opiskeluoikeuden_tyyppiID 
where T.opiskeluoikeus_id is not null
AND     T.opiskeluoikeusAvain = OO.avain
AND     L.avain = T.liikkuvuusjaksoavain
;

-- Jos opintoaste on null edellisen jälkeen
update T
set opintoaste=(
    case otk.Koodi
    when '2' then '1'
    when '4' then '2'
    when '6' then '3'
    when '7' then '3'
    end
)
,koultyp=(
    case otk.Koodi
    
    when '1' then '1' -- Ammattikorkeakoulututkinto
    when '3' then '6' -- Ylempi ammattikorkeakoulututkinto
     
    end
)
from #cimopisk T
    inner join virta.dbo.Liikkuvuusjakso L ON L.OpiskelijaID = T.opiskelija_id    
    inner join virta.dbo.Opiskeluoikeuden_tyyppi otk ON otk.ID = L.Opiskeluoikeuden_tyyppiID
where T.opintoaste is null AND T.opiskeluoikeus_id is null 
;

-- Jos koultyp on null edellisen jälkeen, ei pitäisi vaikuttaa yliopistoihin mikäli ei ole väärällä tyypillä tuotu
update T
set opintoaste=(
    case otk.Koodi
    when '2' then '1'
    when '4' then '2'
    when '6' then '3'
    when '7' then '3'
    end
)
,koultyp=(
    case otk.Koodi
    
    when '1' then '1' -- Ammattikorkeakoulututkinto
    when '3' then '6' -- Ylempi ammattikorkeakoulututkinto
     
    end
)
from #cimopisk T
    inner join virta.dbo.Liikkuvuusjakso L ON L.OpiskelijaID = T.opiskelija_id    
    inner join virta.dbo.Opiskeluoikeuden_tyyppi otk ON otk.ID = L.Opiskeluoikeuden_tyyppiID
where T.koultyp is null AND T.opiskeluoikeus_id is null 
;

---
-- TULOS
---
select * from #cimopisk T
order by hetu

Kerätään kaikki opiskeluoikeudet tyyppiä liikkuvuusjaksot joiden opiskeluoikeus tyyppi on 9 (=Kansainvälinen vaihto) tauluun #cimopisk: oppilaitos, hetu, sukupuoli, liikkuvuusohjelma, kansalaisuus, lähtömaa, liikkuvuuden kesto, liikkuvuuden tyyppi, liikkuvuuden alkamispvm, liikkuvuuden päättymispvm

...

Code Block
titleCIMO pitkä saapuva
collapsetrue
 --CIMO_pitka_saapuva:

DECLARE    @vuosi varchar(4)
SET @vuosi = '2016'

create table #param (
    vuosi varchar(4),
)
;
insert into #param (vuosi)
    select
    @vuosi as vuosi
;

-- Temp-taulu tiedonkeruun tietoja varten
create table #cimopisk (
    oppilaitos varchar(5), -- Oppilaitoskoodi
    hetu varchar(100), --henkilö- tai muu tunnus
    sp varchar(1), -- sukupuoli
    koulutusala varchar(4), -- koulutusala
    opintoaste varchar(1), -- (vain YO)
    liikkuvuusohjelma varchar(3),
    kansalaisuus varchar(3),
    lahtomaa varchar(3),
    kesto varchar(4), --liikkuvuuden kesto
    koultyp varchar(1), --koulutuksen tyyppi (vain AMK)
    tyyppi varchar(2), --liikkuvuuden tyyppi
    --
    jakso_alkupvm date,
    jakso_loppupvm date,
    koulutuskoodi varchar(6),
    --
    opiskelijaavain varchar(100),
    liikkuvuusjaksoavain varchar(100),
    opiskeluoikeusavain varchar(100),
    opiskelija_id int,
    liikkuvuusjakso_id int,
    opiskeluoikeus_id int
)
;
CREATE NONCLUSTERED INDEX IX_cimopisk_opiskelija_id ON #cimopisk (opiskelija_id)
CREATE NONCLUSTERED INDEX IX_cimopisk_liikkuvuusjakso_id ON #cimopisk (liikkuvuusjakso_id)
CREATE NONCLUSTERED INDEX IX_cimopisk_opiskeluoikeus_id ON #cimopisk (opiskeluoikeus_id)
;

print convert(varchar,getdate(),120)+' CREATE temp-taulu param ja cimopisk'
;

---
-- Lisätään perustiedot (henkilö, opiskelija)
-- * täytyy olla liikkuvuusjakso joka on
--   - jonka (liikkuvuuden )suunta on 2=Saapuva
--   - kestänyt vähintään 87 päivää
-- * jakson aloituspäivämäärän vuosi on tilastovuosi
---

INSERT into #cimopisk (
    -- kaikki sarakkeet (kopioitavaksi)
    oppilaitos,hetu,sp,koulutusala,opintoaste,liikkuvuusohjelma,kansalaisuus,lahtomaa,kesto,koultyp,tyyppi
    ,jakso_alkupvm,jakso_loppupvm,koulutuskoodi
    ,opiskelijaavain,liikkuvuusjaksoavain,opiskeluoikeusavain,opiskelija_id,liikkuvuusjakso_id,opiskeluoikeus_id
)

SELECT  DISTINCT 
 oppilaitos = (select OrganisaatioKoodi from Yhteiset.Asetukset.Instanssit where DB=h.DB)
,hetu = h.Henkilotunnus
,sp = (select top 1 k.Koodi from virta.dbo.Sukupuoli k where k.ID=h.SukupuoliID)
,koulutusala = null
,opintoaste = null
,liikkuvuusohjelma = (select top 1 k.Koodi from virta.dbo.Liikkuvuusohjelma k where k.ID=lj.LiikkuvuusohjelmaID)
,kansalaisuus = (
    -- TODO: jos monta?
    select top 1 k.Koodi
    from virta.dbo.Henkilon_maa hm
    join virta.dbo.Maan_rooli mr on mr.ID=hm.Maan_rooliID and mr.Koodi='1'--Kansalaisuus
    join virta.dbo.Maa k on k.ID=hm.MaaID
    where hm.HenkiloID=h.ID
    )
,lahtomaa = (select top 1 k.Koodi from virta.dbo.Maa k where k.ID=lj.MaaID)
,kesto = cast(coalesce(DATEDIFF(day,lj.Alkamispaivamaara,lj.Paattymispaivamaara),9999) as varchar) +1 -- alku- ja loppupvm kuuluu mukaan
,koultyp = null
,tyyppi = (select top 1 k.Koodi from virta.dbo.Liikkuvuuden_tyyppi k where k.ID=lj.Liikkuvuuden_tyyppiID)
--
,jakso_alkupvm = lj.Alkamispaivamaara
,jakso_loppupvm = lj.Paattymispaivamaara
,koulutuskoodi = null
--
,opiskelijaavain = p.Avain
,liikkuvuusjaksoavain = lj.Avain
,opiskeluoikeusavain = (select avain from virta.dbo.Opiskeluoikeus where ID=lj.OpiskeluoikeusID)
,opiskelija_id = p.ID
,liikkuvuusjakso_id = lj.ID
,opiskeluoikeus_id = lj.OpiskeluoikeusID -- voi olla null!


FROM virta.dbo.Henkilo h
inner join virta.dbo.Opiskelija p on p.HenkiloID=h.ID
inner join virta.dbo.Liikkuvuusjakso lj on lj.OpiskelijaID=p.ID
    inner join virta.dbo.Opiskeluoikeus OO ON OO.OpiskelijaID = lj.OpiskelijaID
    INNER JOIN virta.dbo.Opiskeluoikeusjakso oj on oj.OpiskeluoikeusID=OO.id
    inner join virta.dbo.Opiskeluoikeuden_tyyppi otk on otk.ID = OO.Op_oikeuden_tyyppiID  -- KV vaihto tyyppi , Ei Liikkuvuusjakson opiskeluoikeustyyppi
WHERE 1=1
AND otk.koodi = '9' -- Kansainvälinen vaihto
-- suunta 2=Saapuva
and 2 = (select top 1 k.Koodi from virta.dbo.Liikkuvuuden_suunta k where k.ID=lj.Liikkuvuuden_suuntaID)
-- vähintään 87 päivää
and 87 <= coalesce(DATEDIFF(day,lj.Alkamispaivamaara,lj.Paattymispaivamaara),9999) +1 -- alku- ja loppupvm kuuluu mukaan
-- tilastovuosi
and year(lj.Alkamispaivamaara) = (select vuosi from #param)

AND lj.Alkamispaivamaara BETWEEN oj.Alkamispaivamaara AND coalesce(oj.Paattymispaivamaara,'9999-01-01')

-- Saapuva jolla on myös tutkinto-oikeus on double degree?
AND    p.id NOT IN (

            SELECT OO2.opiskelijaid     
            FROM virta.dbo.Opiskeluoikeus OO2 
                inner join virta.dbo.Opiskeluoikeuden_tyyppi otk2 on otk2.ID = OO2.Op_oikeuden_tyyppiID  
                INNER JOIN virta.dbo.Opiskeluoikeusjakso OJ2 on OJ2.OpiskeluoikeusID=OO2.id
            WHERE     otk2.koodi IN ('1','2','3','4','5','6','7','14','15','19')
            
            AND lj.Alkamispaivamaara BETWEEN OO2.Alkamispaivamaara AND COALESCE(OO2.Paattymispaivamaara, @vuosi + '-12-31')
                            
            and year(lj.Alkamispaivamaara) = (select vuosi from #param)
            )
;
print convert(varchar,getdate(),120)+' liikkuvuus- ja opiskelijatiedot'
;


-- Pitkä saapuva ilman opiskeluoikeutta

INSERT into #cimopisk (    
    oppilaitos,hetu,sp,koulutusala,opintoaste,liikkuvuusohjelma,kansalaisuus,lahtomaa,kesto,koultyp,tyyppi
    ,jakso_alkupvm,jakso_loppupvm,koulutuskoodi
    ,opiskelijaavain,liikkuvuusjaksoavain,opiskeluoikeusavain,opiskelija_id,liikkuvuusjakso_id,opiskeluoikeus_id
)

SELECT  DISTINCT 
 oppilaitos = (select OrganisaatioKoodi from Yhteiset.Asetukset.Instanssit where DB=h.DB)
,hetu = h.Henkilotunnus
,sp = (select top 1 k.Koodi from virta.dbo.Sukupuoli k where k.ID=h.SukupuoliID)
,koulutusala = null
,opintoaste = null
,liikkuvuusohjelma = (select top 1 k.Koodi from virta.dbo.Liikkuvuusohjelma k where k.ID=lj.LiikkuvuusohjelmaID)
,kansalaisuus = (
    -- TODO: jos monta?
    select top 1 k.Koodi
    from virta.dbo.Henkilon_maa hm
    join virta.dbo.Maan_rooli mr on mr.ID=hm.Maan_rooliID and mr.Koodi='1'--Kansalaisuus
    join virta.dbo.Maa k on k.ID=hm.MaaID
    where hm.HenkiloID=h.ID
    )
,lahtomaa = (select top 1 k.Koodi from virta.dbo.Maa k where k.ID=lj.MaaID)
,kesto = cast(coalesce(DATEDIFF(day,lj.Alkamispaivamaara,lj.Paattymispaivamaara),9999) as varchar) +1 -- alku- ja loppupvm kuuluu mukaan
,koultyp = null
,tyyppi = (select top 1 k.Koodi from virta.dbo.Liikkuvuuden_tyyppi k where k.ID=lj.Liikkuvuuden_tyyppiID)
--
,jakso_alkupvm = lj.Alkamispaivamaara
,jakso_loppupvm = lj.Paattymispaivamaara
,koulutuskoodi = null
--
,opiskelijaavain = p.Avain
,liikkuvuusjaksoavain = lj.Avain
,opiskeluoikeusavain = (select avain from virta.dbo.Opiskeluoikeus where ID=lj.OpiskeluoikeusID)
,opiskelija_id = p.ID
,liikkuvuusjakso_id = lj.ID
,opiskeluoikeus_id = lj.OpiskeluoikeusID -- voi olla null!

FROM virta.dbo.Henkilo h
        inner join virta.dbo.Opiskelija p on p.HenkiloID=h.ID
        inner join virta.dbo.Liikkuvuusjakso lj on lj.OpiskelijaID=p.ID    
WHERE 
        p.ID NOT IN (SELECT C.opiskelija_id FROM #cimopisk C)

-- suunta 2=Saapuva
and 2 = (select top 1 k.Koodi from virta.dbo.Liikkuvuuden_suunta k where k.ID=lj.Liikkuvuuden_suuntaID)
-- vähintään 87 päivää
and 87 <= coalesce(DATEDIFF(day,lj.Alkamispaivamaara,lj.Paattymispaivamaara),9999) +1 -- alku- ja loppupvm kuuluu mukaan
-- tilastovuosi
and year(lj.Alkamispaivamaara) = (select vuosi from #param)

-- Saapuva jolla on myös tutkinto-oikeus on double degree?
AND    p.id NOT IN (

            SELECT OO2.opiskelijaid     
            FROM virta.dbo.Opiskeluoikeus OO2 
                inner join virta.dbo.Opiskeluoikeuden_tyyppi otk2 on otk2.ID = OO2.Op_oikeuden_tyyppiID  
                INNER JOIN virta.dbo.Opiskeluoikeusjakso OJ2 on OJ2.OpiskeluoikeusID=OO2.id
            WHERE     otk2.koodi IN ('1','2','3','4','5','6','7','14','15','19')
            
            AND lj.Alkamispaivamaara BETWEEN OO2.Alkamispaivamaara AND COALESCE(OO2.Paattymispaivamaara, @vuosi + '-12-31')
            and year(lj.Alkamispaivamaara) = (select vuosi from #param)
            )

AND    p.id NOT IN (
  
            SELECT OO2.opiskelijaid 
            FROM virta.dbo.Opiskeluoikeus OO2                 
                INNER JOIN virta.dbo.Opiskeluoikeusjakso OJ2 on OJ2.OpiskeluoikeusID=OO2.id
                INNER JOIN virta.dbo.Op_oik_jaks_liittyva_luokittelu OL ON OL.OpiskeluoikeusjaksoID = OJ2.id
                INNER JOIN virta.dbo.Opiskeluoikeuden_luokittelu OOL ON OOL.id = OL.Opiskeluoikeuden_luokitteluID
            WHERE     OOL.koodi = '7'            
            AND OJ2.Alkamispaivamaara BETWEEN  lj.Alkamispaivamaara  AND COALESCE(OJ2.Paattymispaivamaara, @vuosi + '-12-31')
            and year(lj.Alkamispaivamaara) = (select vuosi from #param)
            
            )


 ; 




---
-- Opiskeluoikeustiedot
---
/*
    koulutusala varchar(4), -- koulutusala // OKMOhjausala
    opintoaste varchar(1), -- (vain YO) // 1, 2 tai 3 // Opiskeluoikeus.Tyyppi 2,4,6,7
    koultyp varchar(1), --koulutuksen tyyppi (vain AMK) // 1,2, tai 6 // OpiskeluoikeusTyyppi 1,3
*/

-- valitaan yksi per opiskelija, jos ei löytynyt jo ID yllä!
update T
set opiskeluoikeus_id=o.ID, opiskeluoikeusavain=o.avain
from #cimopisk T
inner join virta.dbo.Opiskeluoikeus o on o.OpiskelijaID=T.opiskelija_id
inner join virta.dbo.Op_oikeuden_ensisijaisuus oe on oe.OpiskeluoikeusID=o.ID
where 1=1
-- ensisijainen alkamispäivänä
and T.jakso_alkupvm between oe.Alkamispaivamaara and coalesce(oe.Paattymispaivamaara,'9999-9-9')
;

-- koulutuskoodi
update T
set koulutuskoodi=(select k.Koodi from virta.dbo.Tutkintonimike k where k.ID=oj.TutkintonimikeID)
from #cimopisk T
inner join virta.dbo.Opiskeluoikeusjakso oj on oj.OpiskeluoikeusID=T.opiskeluoikeus_id
where T.opiskeluoikeus_id is not null
-- jakso voimassa alkupäivänä
and T.jakso_alkupvm between oj.Alkamispaivamaara and coalesce(oj.Paattymispaivamaara,'9999-01-01')
;


-- koulutusala
-- nb! OKM:n ohjauksen ala
update T
set koulutusala=K.Koodi
from #cimopisk T
    inner join virta.dbo.Liikkuvuusjakso L ON L.OpiskelijaID =T.opiskelija_id
    inner join virta.dbo.Opiskeluoikeus OO ON OO.OpiskelijaID = L.OpiskelijaID AND OO.ID = T.opiskeluoikeus_id
    inner join virta.dbo.Koulutusala K ON K.id = OO.KoulutusalaID    
    INNER JOIN virta.dbo.Opiskeluoikeusjakso oj on oj.OpiskeluoikeusID=OO.id
where T.opiskeluoikeus_id is not null  AND T.opiskelija_id is not null    
and T.jakso_alkupvm between oj.Alkamispaivamaara and coalesce(oj.Paattymispaivamaara,'9999-01-01')
AND K.Versio = 'ohjausala'
;


update T
set koulutusala=K.Koodi
from #cimopisk T
    inner join virta.dbo.Liikkuvuusjakso L ON L.OpiskelijaID =T.opiskelija_id
    inner join virta.dbo.Opiskeluoikeus OO ON OO.OpiskelijaID = L.OpiskelijaID
    inner join virta.dbo.Koulutusala K ON K.id = OO.KoulutusalaID    
    
where T.koulutusala IS NULL  AND T.opiskelija_id is not null  
AND K.Versio = 'ohjausala'
;



-- opintoaste, koultyp jos on opiskeluoikeusid ensisijaisen mukaan eli ei NULL
update T
set opintoaste=(
    case otk.Koodi
    when '2' then '1'
    when '4' then '2'
    when '6' then '3'
    when '7' then '3'
    end
)
,koultyp=(
    case otk.Koodi
    
    when '1' then '1' -- Ammattikorkeakoulututkinto
    when '3' then '6' -- Ylempi ammattikorkeakoulututkinto
     
    end
)
from #cimopisk T
    inner join virta.dbo.Liikkuvuusjakso L ON L.OpiskelijaID = T.opiskelija_id    
    inner join virta.dbo.opiskeluoikeus OO ON T.opiskeluoikeus_id = OO.id
    inner join virta.dbo.Opiskeluoikeuden_tyyppi otk ON otk.ID = L.Opiskeluoikeuden_tyyppiID
where T.opiskeluoikeus_id is not null
AND     T.opiskeluoikeusAvain = OO.avain
AND     L.avain = T.liikkuvuusjaksoavain
;


-- Jos opintoaste on null edellisen jälkeen
update T
set opintoaste=(
    case otk.Koodi
    when '2' then '1'
    when '4' then '2'
    when '6' then '3'
    when '7' then '3'
    end
)
,koultyp=(
    case otk.Koodi
    
    when '1' then '1' -- Ammattikorkeakoulututkinto
    when '3' then '6' -- Ylempi ammattikorkeakoulututkinto
     
    end
)
from #cimopisk T
    inner join virta.dbo.Liikkuvuusjakso L ON L.OpiskelijaID = T.opiskelija_id    
    inner join virta.dbo.Opiskeluoikeuden_tyyppi otk ON otk.ID = L.Opiskeluoikeuden_tyyppiID
where T.opintoaste is null AND T.opiskeluoikeus_id is null
;


-- Jos koultyp on null edellisen jälkeen, ei pitäisi vaikuttaa yliopistoihin mikäli ei ole väärällä tyypillä tuotu
update T
set opintoaste=(
    case otk.Koodi
    when '2' then '1'
    when '4' then '2'
    when '6' then '3'
    when '7' then '3'
    end
)
,koultyp=(
    case otk.Koodi
    
    when '1' then '1' -- Ammattikorkeakoulututkinto
    when '3' then '6' -- Ylempi ammattikorkeakoulututkinto
     
    end
)
from #cimopisk T
    inner join virta.dbo.Liikkuvuusjakso L ON L.OpiskelijaID = T.opiskelija_id    
    inner join virta.dbo.Opiskeluoikeuden_tyyppi otk ON otk.ID = L.Opiskeluoikeuden_tyyppiID
where T.koultyp is null AND T.opiskeluoikeus_id is null
;

---
-- TULOS
---
select * 
from #cimopisk T
order by hetu
;

Kerätään kaikki opiskeluoikeudet tyyppiä liikkuvuusjaksot joiden opiskeluoikeus tyyppi on 9(=Kansainvälinen vaihto ) tauluun #cimopisk: oppilaitos, hetu, sukupuoli, liikkuvuusohjelma, kansalaisuus,  lähtömaa, liikkuvuuden kesto, liikkuvuuden tyyppi, liikkuvuuden alkamispvm, liikkuvuuden päättymispvm
Liikkuvuuden suunta 2  (=Saapuva)
Liikkuvusjaksot pituudeltaan >= 87 päivää.
Liikkuvusjakso alkamispäivämäärä tilastovuonna (jakson aloituspäivämäärän vuosi on tilastovuosi, nyt tilastovuosi 2016)
Saapuvalla opiskelijalla ei saa olla tutkintoon johtavaa opiskeluoikeutta saman aikaisesti liikkuvuusjakson kanssa ao. korkeakoulussa.Eikä erikoistumiskoulutus tai opettajakoulutus-oikeutta.

...

Haetaan ensin mukaan myös CIMO pitkä saapuva opiskeluoikeudet tyyppiä saapuva  liikkuvuusjaksot joiden opiskeluoikeus tyyppi on 9 (=Kansainvälinen vaihto ) tauluun #cimopisk_pitka

Kerätään sen jälkeen kaikki opiskeluoikeudet tutkintoon johtavan tyyppiä ('1','2','3','4','6','7') tauluun #cimopisk: oppilaitos, hetu, sukupuoli, liikkuvuusohjelma, kohdemaa, liikkuvuuden kesto, liikkuvuuden tyyppi, liikkuvuuden alkamispvm, liikkuvuuden päättymispvm
Liikkuvuuden suunta 1  (=Lähtevä)
Liikkuvusjaksot pituudeltaan 5 - 86 päivää.
Liikkuvusjakso alkamispäivämäärä tilastovuonna (jakson aloituspäivämäärän vuosi on tilastovuosi, nyt tilastovuosi 2016)

...

Code Block
titleCIMO pitkä lähteva
collapsetrue
 --CIMO_pitka_lahteva:

DECLARE    @vuosi varchar(4)
SET @vuosi = '2016'

create table #param (
    vuosi varchar(4),
)
;
insert into #param (vuosi)
    select
    @vuosi as vuosi
;
--select * from #param

-- Temp-taulu tiedonkeruun tietoja varten
create table #cimopisk (
    oppilaitos varchar(5), -- Oppilaitoskoodi // 5-numeroinen
    hetu varchar(100), --henkilö- tai muu tunnus    vapaateksti // jollei henkilötunnusta löydy, käytetään Opiskelija.avain
    sp varchar(1), -- sukupuoli // 1, 2, tai 9
    koulutusala varchar(4), -- koulutusala // OKMOhjausala
    opintoaste varchar(1), -- (vain YO) // 1, 2 tai 3 // Opiskeluoikeus.Tyyppi 2,4,6,7
    liikkuvuusohjelma varchar(3), --// 01-16 tai 99
    kohdemaa varchar(3), --// 000-999
    kesto varchar(4), --liikkuvuuden kesto // päiviä // Vaihdon tulee olla kestänyt vähintään 87 päivää, jotta tulee poimituksi. Kokonaiskesto raportoidaan päivinä ja vaihdon aloituspäivämäärä määrä raportointivuoden.
    koultyp varchar(1), --koulutuksen tyyppi (vain AMK) // 1,2, tai 6 // OpiskeluoikeusTyyppi 1,3
    tyyppi varchar(2), --liikkuvuuden tyyppi // 1, 2
    --
    jakso_alkupvm date,
    jakso_loppupvm date,
    koulutuskoodi varchar(6),
    --
    opiskelijaavain varchar(100),
    liikkuvuusjaksoavain varchar(100),
    opiskeluoikeusavain varchar(100),
    opiskelija_id int,
    liikkuvuusjakso_id int,
    opiskeluoikeus_id int
)
;
CREATE NONCLUSTERED INDEX IX_cimopisk_opiskelija_id ON #cimopisk (opiskelija_id)
CREATE NONCLUSTERED INDEX IX_cimopisk_liikkuvuusjakso_id ON #cimopisk (liikkuvuusjakso_id)
CREATE NONCLUSTERED INDEX IX_cimopisk_opiskeluoikeus_id ON #cimopisk (opiskeluoikeus_id)
;

print convert(varchar,getdate(),120)+' CREATE temp-taulu param ja cimopisk'
;

---
-- Lisätään perustiedot (henkilö, opiskelija)
-- * täytyy olla liikkuvuusjakso joka on
--   - jonka (liikkuvuuden )suunta on 1=Lähtevä
--   - kestänyt vähintään 87 päivää
-- * jakson aloituspäivämäärän vuosi on tilastovuosi
---

INSERT into #cimopisk (
    -- kaikki sarakkeet (kopioitavaksi)
    oppilaitos,hetu,sp,koulutusala,opintoaste,liikkuvuusohjelma,kohdemaa,kesto,koultyp,tyyppi
    ,jakso_alkupvm,jakso_loppupvm,koulutuskoodi
    ,opiskelijaavain,liikkuvuusjaksoavain,opiskeluoikeusavain,opiskelija_id,liikkuvuusjakso_id,opiskeluoikeus_id
)

SELECT  DISTINCT 
 oppilaitos = (select OrganisaatioKoodi from Yhteiset.Asetukset.Instanssit where DB=h.DB)
,hetu = h.Henkilotunnus
,sp = (select top 1 k.Koodi from virta.dbo.Sukupuoli k where k.ID=h.SukupuoliID)
,koulutusala = null
,opintoaste = null
,liikkuvuusohjelma = (select top 1 k.Koodi from virta.dbo.Liikkuvuusohjelma k where k.ID=lj.LiikkuvuusohjelmaID)
,kohdemaa = (select top 1 k.Koodi from virta.dbo.Maa k where k.ID=lj.MaaID)
,kesto = cast(coalesce(DATEDIFF(day,lj.Alkamispaivamaara,lj.Paattymispaivamaara),9999) as varchar) +1 -- alku- ja loppupvm kuuluu mukaan
,koultyp = null
,tyyppi = (select top 1 k.Koodi from virta.dbo.Liikkuvuuden_tyyppi k where k.ID=lj.Liikkuvuuden_tyyppiID)
--
,jakso_alkupvm = lj.Alkamispaivamaara
,jakso_loppupvm = lj.Paattymispaivamaara
,koulutuskoodi = null
--
,opiskelijaavain = p.Avain
,liikkuvuusjaksoavain = lj.Avain
,opiskeluoikeusavain = (select avain from virta.dbo.Opiskeluoikeus where ID=lj.OpiskeluoikeusID)
,opiskelija_id = p.ID
,liikkuvuusjakso_id = lj.ID
,opiskeluoikeus_id = lj.OpiskeluoikeusID -- voi olla null!

FROM virta.dbo.Henkilo h
inner join virta.dbo.Opiskelija p on p.HenkiloID=h.ID
inner join virta.dbo.Liikkuvuusjakso lj on lj.OpiskelijaID=p.ID

WHERE 1=1
-- suunta 1=Lähtevä
and 1 = (select top 1 k.Koodi from virta.dbo.Liikkuvuuden_suunta k where k.ID=lj.Liikkuvuuden_suuntaID)
-- vähintään 87 päivää
and 87 <= coalesce(DATEDIFF(day,lj.Alkamispaivamaara,lj.Paattymispaivamaara),9999) +1 -- alku- ja loppupvm kuuluu mukaan
-- tilastovuosi
and year(lj.Alkamispaivamaara) = (select vuosi from #param)

-- Lähtevillä vain tutkinto ei muita
AND    p.id IN (

            SELECT OO2.opiskelijaid     
            FROM virta.dbo.Opiskeluoikeus OO2 
                inner join virta.dbo.Opiskeluoikeuden_tyyppi otk2 on otk2.ID = OO2.Op_oikeuden_tyyppiID  
                INNER JOIN virta.dbo.Opiskeluoikeusjakso OJ2 on OJ2.OpiskeluoikeusID=OO2.id
            WHERE     otk2.koodi IN ('1','2','3','4','6','7')
            
            AND lj.Alkamispaivamaara BETWEEN OO2.Alkamispaivamaara AND COALESCE(OO2.Paattymispaivamaara, @vuosi + '-12-31')

            and year(lj.Alkamispaivamaara) = (select vuosi from #param)

            )
;

print convert(varchar,getdate(),120)+' liikkuvuus- ja opiskelijatiedot'
;

---
-- Opiskeluoikeustiedot
---
/*
    koulutusala varchar(4), -- koulutusala // OKMOhjausala
    opintoaste varchar(1), -- (vain YO) // 1, 2 tai 3 // Opiskeluoikeus.Tyyppi 2,4,6,7
    koultyp varchar(1), --koulutuksen tyyppi (vain AMK) // 1,2, tai 6 // OpiskeluoikeusTyyppi 1,3
*/

-- valitaan yksi per opiskelija, jos ei löytynyt jo ID yllä!
update T
set opiskeluoikeus_id=o.ID, opiskeluoikeusavain=o.avain
from #cimopisk T
inner join virta.dbo.Opiskeluoikeus o on o.OpiskelijaID=T.opiskelija_id
inner join virta.dbo.Op_oikeuden_ensisijaisuus oe on oe.OpiskeluoikeusID=o.ID
where 1=1
-- ensisijainen alkamispäivänä
and T.jakso_alkupvm between oe.Alkamispaivamaara and coalesce(oe.Paattymispaivamaara,'9999-9-9')
;

-- koulutuskoodi
update T
set koulutuskoodi=(select k.Koodi from virta.dbo.Tutkintonimike k where k.ID=oj.TutkintonimikeID)
from #cimopisk T
inner join virta.dbo.Opiskeluoikeusjakso oj on oj.OpiskeluoikeusID=T.opiskeluoikeus_id
where T.opiskeluoikeus_id is not null
-- jakso voimassa alkupäivänä
and T.jakso_alkupvm between oj.Alkamispaivamaara and coalesce(oj.Paattymispaivamaara,'9999-01-01')
;

-- koulutusala
-- nb! OKM:n ohjauksen ala
update T
set koulutusala=k.okmohjausala
from #cimopisk T
inner join Yhteiset.Koodistot.Koulutusluokitus k on k.Koodi=T.koulutuskoodi
where T.opiskeluoikeus_id is not null and T.koulutuskoodi is not null
-- voimassa alkupäivänä
and T.jakso_alkupvm between k.Alkamispaivamaara and coalesce(k.Paattymispaivamaara,'9999-01-01')
;

-- Lyhyt lähtevä joka on alunperin saapuva vaihto Suomeen, tai kotimainen vaihto
-- Jos on Saapunut opiskeluoikeustyyppi = 9 ja  Lyhyt lähtevä
-- koulutusala (ohjausala)  lähtevän opiskeluoikeudesta (opiskeluoikeustyyppi = 9)
-- koulutusala
-- nb! OKM:n ohjauksen ala
update T
set koulutusala=k.Koodi
from #cimopisk T
    inner join virta.dbo.Liikkuvuusjakso L ON L.OpiskelijaID =T.opiskelija_id
    inner join virta.dbo.Opiskeluoikeus OO ON OO.OpiskelijaID = L.OpiskelijaID
    inner join virta.dbo.Koulutusala K ON K.id = OO.KoulutusalaID            -- koulutusala (ohjausala)  lähtevän opiskeluoikeudesta (opiskeluoikeustyyppi = 9)
    inner join virta.dbo.Opiskeluoikeuden_tyyppi otk on otk.ID = OO.Op_oikeuden_tyyppiID  -- !!

where T.opiskelija_id is not null  
AND otk.koodi IN ('9','8')  -- Kansainvälinen vaihto ja kotimainen vaihto  -- !!
AND T.koulutuskoodi IS NULL 
AND K.Versio = 'ohjausala'
;


-- opintoaste, koultyp
update T
set opintoaste=(
    case otk.Koodi
    when '2' then '1'
    when '4' then '2'
    when '6' then '3'
    when '7' then '3'
    end
)
,koultyp=(
    case otk.Koodi
    when '1'--Ammattikorkeakoulututkinto
     then case
        when o.Aikuiskoulutus='1' then '2'--=Amk-tutkintoon johtava aikuiskoulutus
        when o.Aikuiskoulutus='2' then '1'--=Amk-tutkintoon johtava nuorten koulutus
        else '1' end
    when '3'  then '6'--=Ylempi ammattikorkeakoulututkinto
    --when '12' then '3'--=Erikoistumisopinnot
    --when '15' then '5'--=Ammatillinen opettajankoulutus
    --when '19' then '7'--=Erikoistumiskoulutus
    end
)
from #cimopisk T
inner join virta.dbo.Opiskeluoikeus o on o.ID=T.opiskeluoikeus_id
inner join virta.dbo.Opiskeluoikeuden_tyyppi otk on otk.ID=o.Op_oikeuden_tyyppiID
where T.opiskeluoikeus_id is not null
;


-- opintoaste, koultyp
update T
set opintoaste=(
    case otk.Koodi
    when '2' then '1'
    when '4' then '2'
    when '6' then '3'
    when '7' then '3'
    end
)
,koultyp=(
    case otk.Koodi
    
    when '1' then '1' -- Ammattikorkeakoulututkinto
    when '3' then '6' -- Ylempi ammattikorkeakoulututkinto
    
    end
)
from #cimopisk T
    inner join virta.dbo.Liikkuvuusjakso L on L.OpiskelijaID = T.opiskelija_id    
    inner join virta.dbo.Opiskeluoikeuden_tyyppi otk on otk.ID = L.Opiskeluoikeuden_tyyppiID   -- koultyp lähtevän jakson opiskeluoikeudesta (1)    
    inner join virta.dbo.Opiskeluoikeus OO ON OO.OpiskelijaID = T.opiskelija_id    -- !!
    inner join virta.dbo.Opiskeluoikeuden_tyyppi oootk on oootk.ID = OO.Op_oikeuden_tyyppiID  -- !!    
where T.opiskelija_id is not null
AND oootk.koodi IN ('9','8')  -- Kansainvälinen vaihto ja kotimainen vaihto  -- !!
AND T.koulutuskoodi IS NULL 

---
-- TULOS
---
select * from #cimopisk T
order by hetu
;


Kerätään kaikki liikkuvuusjaksot joiden opiskeluoikeudet tutkintoon johtavan tyyppiä ('1','2','3','4','6','7') tauluun #cimopisk
Liikkuvuuden suunta 1  (=Lähtevä)
Liikkuvusjaksot pituudeltaan >= 87 päivää.
Liikkuvusjakso alkamispäivämäärä tilastovuonna (jakson aloituspäivämäärän vuosi on tilastovuosi, nyt tilastovuosi 2016)

...