Page tree

Versions Compared

Key

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

...

Code Block
languagesql
titleSQL
linenumberstrue
collapsetrue
-- Opintopisteitä varten tehdä oma erillinen aputaulu
-- Temp-taulu tietojen valintaa varten
-- NB! param-taulussa saa olla vain yksi rivi!
IF OBJECT_ID(''tempdb..#pisteet'') IS NOT NULL
BEGIN
	truncate table #pisteet
	drop table #pisteet
	if @debug<>0 print convert(varchar,getdate(),120)+'' DROP temp-taulu pisteet''
END
;
create table #pisteet (
	opiskelija_id int not null,
	opiskeluoikeus_id int,
	opintosuoritus_id int not null,
	laajuus decimal(18,6) not null,
	suoritus_pvm date not null,
	hyvaksiluettu_pvm date,
	es bit,
	ek bit,
	ker bit
)
if @debug<>0 print convert(varchar,getdate(),120)+'' CREATE temp-taulu pisteet''
;
insert into #pisteet (opiskelija_id,opiskeluoikeus_id,opintosuoritus_id,laajuus,suoritus_pvm,hyvaksiluettu_pvm,es,ek,ker)
	select
	 opiskelija_id = s.OpiskelijaID
	,opiskeluoikeus_id = s.OpiskeluoikeusID
	,opintosuoritus_id = s.ID
	,laajuus = s.Laajuus
	,suoritus_pvm = s.Suorituspaivamaara
	,hyvaksiluettu_pvm = shl.Hyvaksilukupaivamaara
	,es = case when s.Suorituspaivamaara
		between cast(cast(#param.vuosi as int)-1 as varchar)+''-08-01'' and cast(cast(#param.vuosi as int)-1 as varchar)+''-12-31''
	  then 1 else 0 end
	,ek = case when s.Suorituspaivamaara between #param.vuosi+''-01-01'' and #param.vuosi+''-07-31''
	  then 1 else 0 end
	,ker = case when s.Suorituspaivamaara <= #param.vuosi+''-07-31''
	  then 1 else 0 end
	from Opintosuoritus s
	inner join Opintosuorituksen_laji sl on sl.ID=s.Opintosuorituksen_lajiID and sl.Koodi=''2'' --muu opintosuoritus
	-- HYVÄKSILUETTU
	left join Opsuorituksen_hyvaksiluku shl on shl.OpintosuoritusID=s.ID
	cross join #param -- saa olla vain yksi rivi!
	where 1=1
	-- lehtitaso, tai ei ainakaan vanhempi
	-- Muutos 2017-09-16 Poisluettu lajin 3,4 suoritukset
    AND s.ID NOT IN (
        
        SELECT     ss.OpintosuoritusID 
        FROM     virta.dbo.Op_suor_sisaltyvyys ss
       
        --  Sisältyvyydet Lajeja 3 ja 4 ei huomioida       
        WHERE         
                 ss.OpintosuoritusID2 NOT IN ( 
        
            SELECT sss.ID            
            FROM virta.dbo.Opintosuoritus sss
            
                INNER JOIN virta.dbo.Opintosuorituksen_laji sssl ON sssl.ID = sss.Opintosuorituksen_lajiID
                
            WHERE     sssl.Koodi in ('3','4')
                 
        )        
        
    )
	
    -- vain jo valituille
    and s.OpiskelijaID in (select T.opiskelija_id from #tkopisk T)
	
;
CREATE NONCLUSTERED INDEX IX_pisteet_opiskelija_id ON #pisteet (opiskelija_id)
 INCLUDE (opiskeluoikeus_id,opintosuoritus_id,laajuus,suoritus_pvm)
;
CREATE NONCLUSTERED INDEX IX_pisteet_suoritus_pvm ON #pisteet (suoritus_pvm)
INCLUDE ([opiskelija_id],[opiskeluoikeus_id],[laajuus])
;
CREATE NONCLUSTERED INDEX IX_pisteet_hyvaksiluettu_pvm ON #pisteet (hyvaksiluettu_pvm)
INCLUDE ([opiskelija_id],[opiskeluoikeus_id],[laajuus],[suoritus_pvm])
;
--select * from #pisteet
-- laajuus :: Suoritettavien opintojen laajuus
--  Tilastokeskuksen ohjeen mukaanhan:
--  Suoritettavien opintojen laajuus opintopisteinä (=tutkinnon laajuudesta vähennetty aiemmin suoritetut hyväksilukujen laajuudet)
update T
set laajuus=cast(
	cast(o.Laajuus as int)
	-
	coalesce(
	(
		select cast(cast(round(sum(
			case
			when
			 s.suoritus_pvm <= o2.Alkamispaivamaara and s.suoritus_pvm <= coalesce(o2.Siirtopaivamaara,''9999-01-01'')
			and s.hyvaksiluettu_pvm <= #param.tilpvm
			then s.laajuus else 0 end),0) as int) as varchar)
		from #pisteet s
		inner join Opiskeluoikeus o2 on o2.ID=T.opiskeluoikeus_id
		cross join #param -- saa olla vain yksi rivi!
		where s.opiskelija_id=T.opiskelija_id
		-- HYVÄKSILUETTU
		and s.hyvaksiluettu_pvm is not null
		and s.opiskeluoikeus_id=T.opiskeluoikeus_id
		group by s.opiskelija_id
	)
	,0)
 as varchar)
--select distinct o.Laajuus
from #tkopisk T
inner join Opiskeluoikeus o on o.ID=T.opiskeluoikeus_id
where o.Laajuus is not null
;

---
-- Opinnot, suoritukset, opintopisteet
---
--
-- TO DONE: "kyseistä tutkintoa varten"!? - opiskeluoikeusid
update T
set opes=(
  select cast(cast(round(sum(
	case when s.es = 1 then s.Laajuus else 0 end),0) as int) as varchar)
  from #pisteet s
  where s.opiskelija_id=T.opiskelija_id
  and s.opiskeluoikeus_id=T.opiskeluoikeus_id
  group by s.opiskelija_id
)
from #tkopisk T
where opes is null
update T
set opek=(
  select cast(cast(round(sum(
	case when s.ek = 1 then s.Laajuus else 0 end),0) as int) as varchar)
  from #pisteet s
  where s.opiskelija_id=T.opiskelija_id
  and s.opiskeluoikeus_id=T.opiskeluoikeus_id
  group by s.opiskelija_id
)
from #tkopisk T
where opek is null
update T
set opker=(
  select cast(cast(round(sum(
	case when s.ker = 1 then s.Laajuus else 0 end),0) as int) as varchar)
  from #pisteet s
  where s.opiskelija_id=T.opiskelija_id
  and s.opiskeluoikeus_id=T.opiskeluoikeus_id
  group by s.opiskelija_id
)
from #tkopisk T
where opker is null
;
update T
set opes=''0''
from #tkopisk T
where opes is null
update T
set opek=''0''
from #tkopisk T
where opek is null
update T
set opker=''0''
from #tkopisk T
where opker is null
;

...