USP_DATALIST_MEMBERSHIPPROGRAM_ACTIVITYBREAKDOWN
Lists activity for a membership program.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@PROGRAMID | uniqueidentifier | IN | Input parameter indicating the context ID for the data list. |
@ACTIONCODE | tinyint | IN | |
@BREAKDOWNTYPE | tinyint | IN | |
@FROMDATE | datetime | INOUT | |
@TODATE | datetime | INOUT | |
@MEMBERSHIPPROGRAMID | uniqueidentifier | INOUT | |
@TOTALCATEGORYMEMBERSHIPS | int | INOUT |
Definition
Copy
CREATE procedure dbo.USP_DATALIST_MEMBERSHIPPROGRAM_ACTIVITYBREAKDOWN
(
@PROGRAMID uniqueidentifier,
@ACTIONCODE tinyint = null,
@BREAKDOWNTYPE tinyint = null,
@FROMDATE datetime = null output,
@TODATE datetime = null output,
@MEMBERSHIPPROGRAMID uniqueidentifier = null output,
@TOTALCATEGORYMEMBERSHIPS int = null output
)
as
set nocount on;
set @FROMDATE = dbo.UFN_DATE_GETEARLIESTTIME(@FROMDATE);
set @TODATE = dbo.UFN_DATE_GETLATESTTIME(@TODATE);
declare @CURRENTDATE datetime = getdate();
set @MEMBERSHIPPROGRAMID = @PROGRAMID
declare @MEMBERSHIPBREAKDOWN table (ID uniqueidentifier, TOTAL integer);
declare @FINALBREAKDOWN table(ID uniqueidentifier, TOTAL int);
if @BREAKDOWNTYPE = 0
begin
insert into @MEMBERSHIPBREAKDOWN
select
MEMBERSHIPLEVELID,
count(MEMBERSHIPID)
from dbo.UFN_MEMBERSHIPPROGRAM_ACTIVITYBREAKDOWN(@PROGRAMID, @ACTIONCODE, @FROMDATE, @TODATE)
group by MEMBERSHIPLEVELID;
select @TOTALCATEGORYMEMBERSHIPS = sum(TOTAL) from @MEMBERSHIPBREAKDOWN;
-- Build in 'Other levels'
if (select count(ID) from @MEMBERSHIPBREAKDOWN) > 5
begin
insert into @FINALBREAKDOWN
select top(4)
ID,
TOTAL
from @MEMBERSHIPBREAKDOWN BREAKDOWN
order by TOTAL desc
insert into @FINALBREAKDOWN
select
null,
sum(TOTAL)
from @MEMBERSHIPBREAKDOWN BREAKDOWN
where not exists(
select 1 from @FINALBREAKDOWN
where ID = BREAKDOWN.ID
)
select
TOTAL,
coalesce(MEMBERSHIPLEVEL.NAME, 'Other levels'),
@MEMBERSHIPPROGRAMID,
@ACTIONCODE,
BREAKDOWN.ID,
null,
@FROMDATE,
@TODATE
from @FINALBREAKDOWN BREAKDOWN
left join dbo.MEMBERSHIPLEVEL
on MEMBERSHIPLEVEL.ID = BREAKDOWN.ID
end
else
begin
select
TOTAL,
MEMBERSHIPLEVEL.NAME,
@MEMBERSHIPPROGRAMID,
@ACTIONCODE,
BREAKDOWN.ID,
null,
@FROMDATE,
@TODATE
from @MEMBERSHIPBREAKDOWN BREAKDOWN
inner join dbo.MEMBERSHIPLEVEL
on MEMBERSHIPLEVEL.ID = BREAKDOWN.ID
order by TOTAL desc
end
end
else
begin
insert into @MEMBERSHIPBREAKDOWN
select
TIERCODEID,
count(MEMBERSHIPID)
from dbo.UFN_MEMBERSHIPPROGRAM_ACTIVITYBREAKDOWN(@PROGRAMID, @ACTIONCODE, @FROMDATE, @TODATE)
group by TIERCODEID;
select @TOTALCATEGORYMEMBERSHIPS = sum(TOTAL) from @MEMBERSHIPBREAKDOWN;
-- Build in 'Other tiers'
if (select count(ID) from @MEMBERSHIPBREAKDOWN) > 5
begin
insert into @FINALBREAKDOWN
select top(4)
-- Differentiate between 'No tier' and 'Other tiers'
coalesce(ID, newid()),
TOTAL
from @MEMBERSHIPBREAKDOWN BREAKDOWN
order by TOTAL desc
insert into @FINALBREAKDOWN
select
null,
sum(TOTAL)
from @MEMBERSHIPBREAKDOWN BREAKDOWN
where not exists(
select 1 from @FINALBREAKDOWN
where ID = BREAKDOWN.ID
)
select
TOTAL,
coalesce(TIERCODE.DESCRIPTION, 'No reporting groups'),
@MEMBERSHIPPROGRAMID,
@ACTIONCODE,
null,
BREAKDOWN.ID,
@FROMDATE,
@TODATE
from @FINALBREAKDOWN BREAKDOWN
left join dbo.TIERCODE
on TIERCODE.ID = BREAKDOWN.ID
where BREAKDOWN.ID is not null
union all
select
TOTAL,
coalesce(TIERCODE.DESCRIPTION, 'Other reporting groups'),
@MEMBERSHIPPROGRAMID,
@ACTIONCODE,
null,
BREAKDOWN.ID,
@FROMDATE,
@TODATE
from @FINALBREAKDOWN BREAKDOWN
left join dbo.TIERCODE
on TIERCODE.ID = BREAKDOWN.ID
where BREAKDOWN.ID is null
end
else
begin
select
TOTAL,
coalesce(TIERCODE.[DESCRIPTION], 'No reporting group'),
@MEMBERSHIPPROGRAMID,
@ACTIONCODE,
null,
BREAKDOWN.ID,
@FROMDATE,
@TODATE
from @MEMBERSHIPBREAKDOWN BREAKDOWN
left join dbo.TIERCODE
on TIERCODE.ID = BREAKDOWN.ID
order by TOTAL desc
end
end