USP_SIMPLEDATALIST_SESSION_GROUPEDBYTIME
Simple list of sessions grouped by time across schools.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ACADEMICYEARID | uniqueidentifier | IN |
Definition
Copy
CREATE procedure dbo.USP_SIMPLEDATALIST_SESSION_GROUPEDBYTIME
(
@ACADEMICYEARID uniqueidentifier
)
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 @ACADEMICYEARNAMECODEID uniqueidentifier
select
@STARTDATE = ACADEMICYEAR.STARTDATE,
@ENDDATE = ACADEMICYEAR.ENDDATE,
@ACADEMICYEARNAMECODEID = ACADEMICYEAR.ACADEMICYEARNAMECODEID
from dbo.ACADEMICYEAR
where ACADEMICYEAR.ID = @ACADEMICYEARID
select
T.ID as VALUE,
SESSIONNAMECODE.DESCRIPTION +
case when T.COLAPSE = 0
then ' - ' + CONSTITUENT.NAME
else ''
end as LABEL
from
(
select
SESSION.ID,
ACADEMICYEAR.SCHOOLID,
SESSION.SESSIONNAMECODEID,
SESSION.STARTDATE,
case when (max(SESSION.STARTDATE) over (partition by SESSION.SESSIONNAMECODEID) != min(SESSION.STARTDATE) over (partition by SESSION.SESSIONNAMECODEID)
or max(SESSION.ENDDATE) over (partition by SESSION.SESSIONNAMECODEID) != min(SESSION.ENDDATE) over (partition by SESSION.SESSIONNAMECODEID)
or max(cast(TIMETABLE.CYCLEID as nvarchar(36))) over (partition by SESSION.SESSIONNAMECODEID) != min(cast(TIMETABLE.CYCLEID as nvarchar(36))) over (partition by SESSION.SESSIONNAMECODEID))
then 0
else 1
end as COLAPSE,
ROW_NUMBER() over (partition by SESSION.SESSIONNAMECODEID order by SESSION.STARTDATE) as ROW
from
(
select
SESSION.ID,
SESSION.SESSIONNAMECODEID,
SESSION.ACADEMICYEARID,
SESSION.TIMETABLEID,
min(TERM.STARTDATE) as STARTDATE,
max(TERM.ENDDATE) as ENDDATE
from dbo.SESSION
inner join dbo.TERM on SESSION.ID = TERM.SESSIONID
group by SESSION.ID, SESSION.SESSIONNAMECODEID, SESSION.ACADEMICYEARID, SESSION.TIMETABLEID
having min(TERM.STARTDATE) >= @STARTDATE and max(TERM.ENDDATE) <= @ENDDATE
) [SESSION]
inner join dbo.ACADEMICYEAR on SESSION.ACADEMICYEARID = ACADEMICYEAR.ID
and ACADEMICYEAR.ACADEMICYEARNAMECODEID = @ACADEMICYEARNAMECODEID
and (@SCHOOLID is null or ACADEMICYEAR.SCHOOLID = @SCHOOLID)
inner join dbo.TIMETABLE on SESSION.TIMETABLEID = TIMETABLE.ID
) T
inner join dbo.SESSIONNAMECODE on T.SESSIONNAMECODEID = SESSIONNAMECODE.ID
inner join dbo.CONSTITUENT on T.SCHOOLID = CONSTITUENT.ID
where T.COLAPSE = 0 or T.ROW = 1
order by T.STARTDATE, SESSIONNAMECODE.DESCRIPTION