Opetushallituksen liikkuvuusjaksotiedonkeruu


Poimintaehdot

OPH:n liikkuvuustiedonkeruissa (kaikissa neljässä), haetaan opiskelijan ensisijainen opiskeluoikeus kyseiselle liikkuvuusjaksolle.

Pitkäkestoiset lähtevät liikkuvuusjaksot (väh. 3 kk)
Kerättävä tietoVanha tiedon muoto/koodisto

Tieto VIRTA-opintotietopalvelussa
(tietovarannon koodistot)

Tiedonsiirtoskeeman tieto VIRTA:ssa
yliopiston tunnus TAI ammattikorkeakoulun numeroYO: TK:n 2-numeroinen yliopistokoodisto* /
AMK: TK:n 5-numeroinen oppilaitoskoodisto

Organisaatio
-> Oppilaitoskoodisto (5-numeroinen)


OrganisaatioKoodiTyyppi
opiskelijan henkilö- tai muu tunnusvapaatekstiHenkilötunnus
- jollei henkilötunnusta löydy, käytetään opiskelijaan liittyvää avainta.

Opiskelija.Henkilotunnus
Opiskelija.avain

sukupuoli 1, 2, tai 9

Sukupuoli

Opiskelija.Sukupuoli
1,2 ja 9
koulutusala1 - 12

Koulutusluokitus

OKM korkeakoulujen ohjauksen alat


Opiskeluoikeus.koulutusala
koulutuskoodiTK:n 6-numeroinenKoulutusluokitus
Tutkintonimikekoodi
Opiskeluoikeus.Jakso.Koulutuskoodi
opintoaste (vain YO)

1, 2 tai 3

Opiskeluoikeuden tyyppi (YO)

Opiskeluoikeus.tyyppi
1,2,3,4,6,7

Lähtevien saapuneiden vaihto-opiskelijoiden kohdalla, joilla on opiskeluoikeus.tyyppi 9
Liikkuvuusjakso.opiskeluoikeustyyppi
1,2,3,4,6,7

koulutuksen tyyppi (vain AMK)1,2 tai 6Opiskeluoikeuden tyyppi (AMK)

Opiskeluoikeus.tyyppi
1,2,3,4,6,7

Lähtevien saapuneiden vaihto-opiskelijoiden kohdalla, joilla on opiskeluoikeus.tyyppi 9
Liikkuvuusjakso.opiskeluoikeustyyppi
1,2,3,4,6,7

liikkuvuusohjelma01-16 tai 99

Liikkuvuusohjelma

Liikkuvuusohjelma
kohdemaa000-999MaaMaatunnusKoodiTyyppi
liikkuvuuden kesto kuukausina 3-n

Liikkuvuusjakson alkamispäivämäärän ja päättymispäivämäärän erotus
- Vaihdon tulee olla kestänyt vähintään 87 päivää, jotta tulee poimituksi.
Kokonaiskesto raportoidaan päivinä ja vaihdon aloituspäivämäärä
raportointivuoden mukaan.

Pvmtyyppi
AlkuPvm, LoppuPvm
liikkuvuuden tyyppi

1, 2

Tyyppi

LiikkuvuusTyyppiKoodiTyyppi
1,2
liikkuvuuden suunta1, 2Suunta

LiikkuvuusSuuntaKoodiTyyppi
1
ikä


aloitusvuosi


liikkuvuuden luokittelubLuokittelu

Luokittelu



Pitkäkestoiset saapuvat liikkuvuusjaksot (väh. 3 kk)
Kerättävä tietoTiedon muoto/koodistoTieto VIRTA-opintotietopalvelussa
(tietovarannon koodistot)
Tiedonsiirtoskeeman tieto VIRTA:ssa
yliopiston tunnus TAI ammattikorkeakoulun numeroYO: TK:n 2-numeroinen yliopistokoodisto* / AMK: TK:n 5-numeroinen oppilaitoskoodistoOrganisaatio
-> Oppilaitoskoodisto (5-numeroinen)

OrganisaatioKoodiTyyppi

opiskelijan henkilö- tai muu tunnus  vapaatekstiHenkilötunnus
- jollei henkilötunnusta löydy, käytetään opiskelijaan liittyvää avainta.

Opiskelija.Henkilotunnus
Opiskelija.avain

sukupuoli 1, 2, tai 9Sukupuoli

Opiskelija.Sukupuoli
1,2 ja 9

koulutusala

1 - 12

Koulutusluokitus

OKM korkeakoulujen ohjauksen alat


Opiskeluoikeus.koulutusala

koulutuskoodi

999999 tai tyhjäKoulutusluokitus
Tutkintonimikekoodi
Opiskeluoikeus.Jakso.Koulutuskoodi
opintoaste (vain YO)

1, 2 tai 3

Opiskelijan Opiskeluoikeuden tyyppi

Liikkuvuusjakson Opiskeluoikeuden tyyppi

Opiskeluoikeustyyppi
9

Liikkuvuusjakso.opiskeluoikeustyyppi
1,2,3,4,6,7

koulutuksen tyyppi (vain AMK)1,2 tai 6

Opiskelijan Opiskeluoikeuden tyyppi

Liikkuvuusjakson Opiskeluoikeuden tyyppi

Opiskeluoikeustyyppi
9

Liikkuvuusjakso.opiskeluoikeustyyppi
1,2,3,4,6,7

liikkuvuusohjelma01-16 tai 99LiikkuvuusohjelmaLiikkuvuusohjelma
kansalaisuus000-999Maat ja valtiotOpiskelija.Kansalaisuus
lähtömaa000-999MaaMaatunnusKoodiTyyppi
liikkuvuuden kesto kuukausina  3-nLiikkuvuusjakson AlkuPvm, LiikkuvuusjaksonLoppuPvm
- Vaihdon tulee olla kestänyt vähintään 87 päivää, jotta tulee poimituksi.
Kokonaiskesto raportoidaan päivinä ja vaihdon aloituspäivämäärä
raportointivuoden mukaan.

PvmTyyppi


liikkuvuuden tyyppi1, 2TyyppiTyyppi
LiikkuvuusTyyppiKoodiTyyppi
liikkuvuuden suunta1, 2SuuntaLiikkuvuusSuuntaKoodiTyyppi
2
ikä


aloitusvuosi


liikkuvuuden luokittelubLuokitteluLuokittelu


Lyhytkestoiset lähtevät liikkuvuusjaksot (1 vk - alle 3 kk)
Kerättävä tietoTiedon muoto/koodistoTieto VIRTA-opintotietopalvelussa
(tietovarannon koodistot)
Tiedonsiirtoskeeman tieto VIRTA:ssa
yliopiston tunnus TAI ammattikorkeakoulun numeroYO: TK:n 2-numeroinen yliopistokoodisto* / AMK: TK:n 5-numeroinen oppilaitoskoodistoOrganisaatio
-> Oppilaitoskoodisto (5-numeroinen)
OrganisaatioKoodiTyyppi
opiskelijan henkilö- tai muu tunnus vapaatekstiHenkilötunnus
- jollei henkilötunnusta löydy, käytetään opiskelijaan liittyvää avainta.

Opiskelija.Henkilotunnus
Opiskelija.avain

sukupuoli1, 2, tai 9Sukupuoli

Opiskelija.Sukupuoli
1,2 ja 9

koulutusala 1 - 12

Koulutusluokitus

OKM korkeakoulujen ohjauksen alat


Opiskeluoikeus.koulutusala
koulutuskoodiTK:n 6-numeroinenKoulutusluokitus
Tutkintonimikekoodi
Opiskeluoikeus.Jakso.Koulutuskoodi
opintoaste (vain YO)

1, 2 tai 3

Opiskeluoikeuden tyyppi (YO)

Opiskeluoikeus.Tyyppi
1,2,3,4,6,7
Lähtevien saapuneiden vaihto-opiskelijoiden kohdalla, joilla on opiskeluoikeus.tyyppi 9 Liikkuvuusjakso.opiskeluoikeustyyppi
1,2,3,4,6,7

koulutuksen tyyppi (vain AMK)1,2 tai 6Opiskeluoikeuden tyyppi (AMK)

Opiskeluoikeus.Tyyppi
1,2,3,4,6,7,
Lähtevien saapuneiden vaihto-opiskelijoiden kohdalla, joilla on opiskeluoikeus.tyyppi 9
Liikkuvuusjakso.opiskeluoikeustyyppi
1,2,3,4,6,7

kohdemaa000-999MaaMaatunnusKoodiTyyppi
liikkuvuuden kesto viikkoina 1-Liikkuvuusjakson AlkuPvm, Liikkuvuusjakson LoppuPvm
- Kokonaiskesto raportoidaan päivinä ja
vaihdon aloituspäivämäärä määrää
raportointivuoden.
PvmTyyppi
liikkuvuuden tyyppi1, 2TyyppiTyyppi
LiikkuvuusTyyppiKoodiTyyppi
liikkuvuuden suunta1,2

Suunta

LiikkuvuusSuuntaKoodiTyyppi

1

ikä



aloitusvuosi



liikkuvuusohjelma01-16 tai 99

Liikkuvuusohjelma

Liikkuvuusohjelma
liikkuvuuden luokittelubLuokittelu

Luokittelu


Lyhytkestoiset saapuvat liikkuvuusjaksot (1 vk - alle 3 kk)
Kerättävä tietoTiedon muoto/koodistoTieto VIRTA-opintotietopalvelussa
(tietovarannon koodistot)
TTiedonsiirtoskeeman tieto VIRTA:ssa
yliopiston tunnus TAI ammattikorkeakoulun numeroYO: TK:n 2-numeroinen yliopistokoodisto* / AMK: TK:n 5-numeroinen oppilaitoskoodisto Organisaatio
-> Oppilaitoskoodisto (5-numeroinen)

OrganisaatioKoodiTyyppi

opiskelijan henkilö- tai muu tunnus vapaateksti Henkilötunnus
- jollei henkilötunnusta löydy, käytetään opiskelijaan liittyvää avainta.

Opiskelija.Henkilotunnus
Opiskelija.avain

sukupuoli1, 2, tai 9Sukupuoli

Opiskelija.Sukupuoli
1,2 ja 9

koulutusala

1 - 12

Koulutusluokitus

OKM korkeakoulujen ohjauksen alat


Opiskeluoikeus.koulutusala
koulutuskoodi
  • ei koske saapuvia
999999 tai tyhjäKoulutusluokitus
Tutkintonimikekoodi
Opiskeluoikeus.Jakso.Koulutuskoodi
opintoaste (vain YO)

1, 2 tai 3

Opiskelijan Opiskeluoikeuden tyyppi
Liikkuvuusjakson Opiskeluoikeuden tyyppi (YO)

Opiskeluoikeustyyppi
9
Liikkuvuusjakso.opiskeluoikeustyyppi
1,2,3,4,6,7

koulutuksen tyyppi (vain AMK)1,2 tai 6Opiskelijan Opiskeluoikeuden tyyppi
Liikkuvuusjakson Opiskeluoikeuden tyyppi (AMK)

Opiskeluoikeustyyppi
9
Liikkuvuusjakso.opiskeluoikeustyyppi
1,2,3,4,6,7

lähtömaa 000-999MaaMaatunnusKoodiTyyppi
liikkuvuuden kesto viikkoina 1-Liikkuvuusjakson AlkuPvm, Liikkuvuusjakson LoppuPvm
- Kokonaiskesto raportoidaan päivinä ja
vaihdon aloituspäivämäärä määrää
raportointivuoden.
PvmTyyppi
liikkuvuuden tyyppi 1, 2TyyppiLiikkuvuusTyyppiKoodiTyyppi
liikkuvuuden suunta1,2Suunta

LiikkuvuusSuuntaKoodiTyyppi

2

ikä


aloitusvuosi


liikkuvuusohjelma01-16 tai 99

Liikkuvuusohjelma

Liikkuvuusohjelma
liikkuvuuden luokittelubLuokitteluLuokittelu

*Paitsi Taideyliopisto, joka menee amk-mallin mukaan

 


CIMO-tiedostot poimintaehdot


CIMO lyhyt saapuva:

 -- 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 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 5 - 86 päivää.
Liikkuvusjakso alkamispäivämäärä tilastovuonna (nyt tilastovuosi 2016)
Saapuvalla opiskelijalla ei saa olla tutkintoon johtavaa opiskeluoikeutta saman aikaisesti liikkuvuusjakson kanssa ao. korkeakoulussa. Eikä erikoistumiskoulutus tai opettajakoulutus-oikeutta.

Kerätään mukaan myös kaikki opiskelijat joilla ei ole opiskeluoikeutta mutta on olemaassa ajalta liikkuuvuusjaksoja.
Liikkuvuuden suunta 2  (=Saapuva)
Liikkuvusjaksot pituudeltaan 5 - 86 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.


CIMO pitkä saapuva:

 --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 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.

Kerätään mukaan myös kaikki opiskelijat joilla ei ole opiskeluoikeutta mutta on olemaassa ajalta liikkuuvuusjaksoja.
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.


CIMO lyhyt lähteva:

 --CIMO_lyhyt_lahteva:

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 // 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
    kohdemaa varchar(3), --// 000-999
    kesto varchar(4), --liikkuvuuden kesto // päiviä
    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)
;


create table #cimopisk_pitka (
    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
    kohdemaa varchar(3), --// 000-999
    kesto varchar(4), --liikkuvuuden kesto // päiviä
    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_pitka_opiskelija_id ON #cimopisk_pitka (opiskelija_id)
CREATE NONCLUSTERED INDEX IX_cimopisk_pitka_liikkuvuusjakso_id ON #cimopisk_pitka (liikkuvuusjakso_id)
CREATE NONCLUSTERED INDEX IX_cimopisk_pitka_opiskeluoikeus_id ON #cimopisk_pitka (opiskeluoikeus_id)
;


-- Pitkät saapuneet jotka lähtee lyhyelle vaihdolle
INSERT into #cimopisk_pitka  (
    -- kaikki sarakkeet (kopioitavaksi)
    oppilaitos,hetu,sp,koulutusala,opintoaste,kohdemaa,kesto,koultyp,tyyppi
    ,jakso_alkupvm,jakso_loppupvm,koulutuskoodi
    ,opiskelijaavain,liikkuvuusjaksoavain,opiskeluoikeusavain,opiskelija_id,liikkuvuusjakso_id,opiskeluoikeus_id
)

SELECT
 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
,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
    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 IN ('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')





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 [5,7] ja enintää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,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
,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 [5,7] ja enintää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)

-- 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)

            )

;


-- Lyhyt lähtö pitkä saapuva
INSERT into #cimopisk (
    -- kaikki sarakkeet (kopioitavaksi)
    oppilaitos,hetu,sp,koulutusala,opintoaste,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
,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 p.id IN ( SELECT C2.opiskelija_id FROM #cimopisk_pitka C2 )
-- 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 [5,7] ja enintää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)
;


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 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


Haetaan ensin mukaan myös CIMO pitkä 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)

Lisätään joukkoon pitkät saapuvat joilla löytyy lyhyt liikkuvuusjakso taulusta #cimopisk_pitka
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)


CIMO pitkä lähteva:

 --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)


Yhteiset kaikkiin neljään poimintaan:

opiskeluoikeus tieto YO ensisijaisuuden mukaan, jos on.
AMK liikkuvuusjakson jo opiskeluoikeuden kautta tiedossa  #cimopisk taulussa.

koulutuskoodi opiskeluoikeusjaksosta, jos on.

koulutusala (ohjausala) opiskeluoikeudesta.

opintoaste (YO):

opiskeluoikeuden tyyppi => opintoaste

2     => 1    -- Alempi korkeakoulututkinto
4     => 2    -- Ylempi korkeakoulututkinto
6     => 3    -- Lisensiaatintutkinto tai tohtorintutkinto
7     => 3    -- Lisensiaatintutkinto tai tohtorintutkinto


koulutus typpi (AMK):

opiskeluoikeuden tyyppi => koultyp

1    => 1 -- Ammattikorkeakoulututkinto
3    => 6 -- Ylempi ammattikorkeakoulututkinto