USP_SIMPLEDATALIST_TERM_GROUPEDBYTIME

Simple list of terms grouped by time across schools.

Parameters

Parameter Parameter Type Mode Description
@ACADEMICYEARID uniqueidentifier IN
@SESSIONID uniqueidentifier IN

Definition

Copy


CREATE procedure dbo.USP_SIMPLEDATALIST_TERM_GROUPEDBYTIME
(
    @ACADEMICYEARID uniqueidentifier,
    @SESSIONID uniqueidentifier    -- used for the representative dates, does not necessarily imply school.

)
as

-- 1) Determine if the AY implies school

-- (If an AY was picked which was not the only one by that name, you know school was implied)

declare @SCHOOLID uniqueidentifier = dbo.UFN_ACADEMICYEAR_GETSCHOOL_GROUPBYTIMEFILTER(@ACADEMICYEARID)

declare @STARTDATE date
declare @ENDDATE date
declare @SESSIONNAMECODEID uniqueidentifier

-- 2) Determine if the Session implies school

-- (If a Session was picked which was not the only one by that name, you know school was implied)

if @SCHOOLID is null
begin
    select @SCHOOLID = dbo.UFN_SESSION_GETSCHOOL_GROUPBYTIMEFILTER(@ACADEMICYEARID, @SESSIONID)
end

select 
    @STARTDATE = min(TERM.STARTDATE), 
    @ENDDATE = max(TERM.ENDDATE),
    @SESSIONNAMECODEID = SESSION.SESSIONNAMECODEID
from dbo.TERM
    inner join dbo.SESSION on TERM.SESSIONID = SESSION.ID
where SESSION.ID = @SESSIONID
group by SESSION.ID, SESSION.SESSIONNAMECODEID

select
    T.ID as VALUE,
    TERMNAMECODE.DESCRIPTION +
        case when T.COLAPSE = 0
            then ' - ' + CONSTITUENT.NAME
            else ''
        end as LABEL
from
    (
        select
            TERM.ID,
            ACADEMICYEAR.SCHOOLID as SCHOOLID,
            TIMETABLE.CYCLEID,
            TERM.TERMNAMECODEID,
            TERM.STARTDATE,
            case when (max(TERM.STARTDATE) over (partition by TERM.TERMNAMECODEID) != min(TERM.STARTDATE) over (partition by TERM.TERMNAMECODEID)
                or max(TERM.ENDDATE) over (partition by TERM.TERMNAMECODEID) != min(TERM.ENDDATE) over (partition by TERM.TERMNAMECODEID))
                then 0
                else 1
            end as COLAPSE,
            ROW_NUMBER() over (partition by TERM.TERMNAMECODEID order by TERM.STARTDATE) as ROW
        from dbo.SESSION
            inner join dbo.ACADEMICYEAR on SESSION.ACADEMICYEARID = ACADEMICYEAR.ID
                and (@SCHOOLID is null or ACADEMICYEAR.SCHOOLID = @SCHOOLID)
            inner join dbo.TERM on SESSION.ID = TERM.SESSIONID
            inner join dbo.TIMETABLE on SESSION.TIMETABLEID = TIMETABLE.ID
        where SESSION.SESSIONNAMECODEID = @SESSIONNAMECODEID
            and TERM.STARTDATE >= @STARTDATE
            and TERM.ENDDATE <= @ENDDATE
    ) T
    inner join dbo.TERMNAMECODE on T.TERMNAMECODEID = TERMNAMECODE.ID
    inner join dbo.CONSTITUENT on T.SCHOOLID = CONSTITUENT.ID
where T.COLAPSE = 0 or T.ROW = 1
order by T.STARTDATE, TERMNAMECODE.DESCRIPTION