USP_DATALIST_RECOGNITIONCOUNTREPORT
Returns data for the recognition count report.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@DATEFROM | datetime | IN | From |
@DATETO | datetime | IN | To |
@PROGRAMID | uniqueidentifier | IN | |
@BY | tinyint | IN | By |
@GROUPBY | tinyint | IN | Group By |
Definition
Copy
CREATE procedure dbo.USP_DATALIST_RECOGNITIONCOUNTREPORT(
@DATEFROM datetime,
@DATETO datetime,
@PROGRAMID uniqueidentifier,
@BY tinyint,
@GROUPBY tinyint)
as
set nocount on;
declare @TODAY datetime;
set @TODAY = getdate();
DECLARE @PERIODTABLE TABLE(
PERIOD nvarchar(26),
PERIODSTARTDATE datetime,
PERIODENDDATE datetime
);
--create a data table with all possible period's for a given range (@DATEFROM - @DATETO)
with datetable as(
select DateValue = @DATEFROM
union all
select DateValue + 1
from datetable
where DateValue + 1 < @DATETO
)
INSERT INTO @PERIODTABLE(PERIOD, PERIODSTARTDATE, PERIODENDDATE)
--these case statements determine how the date range table will be grouped; by month, quarter, or year
select distinct
case
when @BY = 0 then convert(nvarchar(2),datepart(month,DateValue)) + ' / ' + convert(nvarchar(4),datepart(year,DateValue))
when @BY = 1 then 'Q' + convert(nvarchar(2),datepart(quarter,DateValue))+ ' - '+convert(nvarchar(4),datepart(year,DateValue))
when @BY = 2 then convert(nvarchar(4),datepart(year,DateValue))
end as PERIOD,
case
when @BY = 0 then dbo.UFN_DATE_THISMONTH_FIRSTDAY(DateValue,0)
when @BY = 1 then dbo.UFN_DATE_THISQUARTER_FIRSTDAY(DateValue,0)
when @BY = 2 then dbo.UFN_DATE_THISCALENDARYEAR_FIRSTDAY(DateValue,0)
end as PERIODSTARTDATE,
case
when @BY = 0 then dbo.UFN_DATE_THISMONTH_LASTDAY(DateValue,1)
when @BY = 1 then dbo.UFN_DATE_THISQUARTER_LASTDAY(DateValue,0)
when @BY = 2 then dbo.UFN_DATE_THISCALENDARYEAR_LASTDAY(DateValue,0)
end as PERIODENDDATE
from datetable
OPTION (MAXRECURSION 0);
--check to make sure nothing outside the given date range is used
update @PERIODTABLE
set PERIODSTARTDATE = dbo.UFN_DATE_GETEARLIESTTIME(@DATEFROM)
where PERIODSTARTDATE < @DATEFROM;
update @PERIODTABLE
set PERIODENDDATE = dbo.UFN_DATE_GETLATESTTIME(@DATETO)
where PERIODENDDATE > @DATETO;
--these case statements determine how the datalist will be grouped; by level or by type
select
PERIOD,
dbo.UFN_CONSTITUENTRECOGNITION_GETCOUNT_BYDATERANGE(
@PROGRAMID,
case
when @GROUPBY = 0 then RECOGNITIONLEVEL.TIERCODEID
when @GROUPBY = 1 then RECOGNITIONLEVELID
end,
@GROUPBY,
PERIODSTARTDATE,
PERIODENDDATE
) as COUNT,
case
when @GROUPBY = 0 then case when TIERCODE.DESCRIPTION is null then 'No Tier' else TIERCODE.DESCRIPTION end
when @GROUPBY = 1 then RECOGNITIONLEVEL.NAME
end as GROUPEDBYCOLUMN,
PERIODENDDATE
from
dbo.CONSTITUENTRECOGNITION
left join dbo.RECOGNITIONLEVEL on CONSTITUENTRECOGNITION.RECOGNITIONLEVELID = RECOGNITIONLEVEL.ID
left join dbo.TIERCODE on RECOGNITIONLEVEL.TIERCODEID = TIERCODE.ID
cross join @PERIODTABLE
where RECOGNITIONLEVEL.RECOGNITIONPROGRAMID = @PROGRAMID
group by
PERIODSTARTDATE,
PERIODENDDATE,
case
when @GROUPBY = 0 then RECOGNITIONLEVEL.TIERCODEID
when @GROUPBY = 1 then RECOGNITIONLEVELID
end,
case
when @GROUPBY = 0 then case when TIERCODE.DESCRIPTION is null then 'No Tier' else TIERCODE.DESCRIPTION end
when @GROUPBY = 1 then RECOGNITIONLEVEL.NAME
end,
case
when @GROUPBY = 0 then TIERCODE.SEQUENCE
when @GROUPBY = 1 then RECOGNITIONLEVEL.AMOUNT
end,
PERIOD
order by
PERIODENDDATE,
case
when @GROUPBY = 0 then TIERCODE.SEQUENCE
when @GROUPBY = 1 then RECOGNITIONLEVEL.AMOUNT
end