USP_MKTMEMBERSHIPMAILINGSEGMENT_GETRESPONSECOUNTS
Returns the number of renewals, upgrades and downgrades, and the total and average renewal amounts, for an activated membership renewal effort segment.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@SEGMENTID | uniqueidentifier | IN | |
@TESTSEGMENTID | uniqueidentifier | IN | |
@ASOFDATE | datetime | IN |
Definition
Copy
CREATE procedure dbo.[USP_MKTMEMBERSHIPMAILINGSEGMENT_GETRESPONSECOUNTS]
(
@SEGMENTID uniqueidentifier,
@TESTSEGMENTID uniqueidentifier = null,
@ASOFDATE datetime = null
)
as
set nocount on;
declare @EXCLUDE bit;
declare @SEGMENTATIONID uniqueidentifier;
declare @DATATABLE nvarchar(255);
declare @GIFTIDSETNAME nvarchar(255);
declare @ACTIONCODEFIELDNAME nvarchar(255);
declare @ISBBEC bit;
declare @SQL nvarchar(max);
declare @PARAMDEF nvarchar(1024);
declare @RENEWALS int;
declare @UPGRADES int;
declare @DOWNGRADES int;
declare @TOTALRENEWALAMOUNT money;
declare @AVERAGERENEWALAMOUNT money;
declare @ORGANIZATIONTOTALRENEWALAMOUNT money;
declare @ORGANIZATIONAVERAGERENEWALAMOUNT money;
declare @WHERESQL nvarchar(max);
-- gather some info so we can build the SQL
select distinct
@EXCLUDE = [SS].[EXCLUDE],
@SEGMENTATIONID = [SS].[SEGMENTATIONID],
@GIFTIDSETNAME = dbo.[UFN_MKTSELECTION_GETFUNCTIONNAME]([SA].[NORMALGIFTIDSETREGISTERID]),
@ISBBEC = dbo.[UFN_MKTRECORDSOURCE_VALIDFORBBEC]([S].[QUERYVIEWCATALOGID])
from dbo.[MKTSEGMENTATIONSEGMENT] as [SS]
left join dbo.[MKTSEGMENT] as [S] on [S].[ID] = [SS].[SEGMENTID]
left join dbo.[MKTSEGMENTATIONTESTSEGMENT] as [STS] on [STS].[SEGMENTID] = [SS].[ID]
inner join dbo.[MKTSEGMENTATIONACTIVATE] as [SA] on [SA].[SEGMENTATIONID] = [SS].[SEGMENTATIONID] and [SA].[RECORDSOURCEID] = [S].[QUERYVIEWCATALOGID]
where [SS].[ID] = @SEGMENTID
and (@TESTSEGMENTID is null or [STS].[ID] = @TESTSEGMENTID);
if @EXCLUDE = 0
begin
set @DATATABLE = dbo.[UFN_MKTSEGMENTATIONACTIVATE_MAKETABLENAME](@SEGMENTATIONID);
set @WHERESQL = 'where [DONORS].[SEGMENTID] = @SEGMENTID' + char(13) +
'and [DONORS].[TESTSEGMENTID] ' + (case when @TESTSEGMENTID is null then 'is null' else '= @TESTSEGMENTID' end) + char(13);
if @ASOFDATE is not null
set @WHERESQL = @WHERESQL + 'and [GIFTIDSET].[DATE] <= @ASOFDATE' + char(13);
if @ISBBEC = 1
set @ACTIONCODEFIELDNAME = '[MEMBERSHIPTRANSACTION].[ACTIONCODE]';
else
set @ACTIONCODEFIELDNAME = '[TODO]';
set @SQL = 'select' + char(13) +
' @RENEWALS = isnull(sum(case when isnull(' + @ACTIONCODEFIELDNAME + ', 255) in (1, 2, 3) then 1 else 0 end), 0),' + char(13) +
' @UPGRADES = isnull(sum(case when isnull(' + @ACTIONCODEFIELDNAME + ', 255) = 2 then 1 else 0 end), 0),' + char(13) +
' @DOWNGRADES = isnull(sum(case when isnull(' + @ACTIONCODEFIELDNAME + ', 255) = 3 then 1 else 0 end), 0),' + char(13) +
' @TOTALRENEWALAMOUNT = isnull(sum(case when isnull(' + @ACTIONCODEFIELDNAME + ', 255) in (1, 2, 3) then [GIFTIDSET].[AMOUNT] else 0 end), 0),' + char(13) +
' @AVERAGERENEWALAMOUNT = isnull(avg(case when isnull(' + @ACTIONCODEFIELDNAME + ', 255) in (1, 2, 3) then [GIFTIDSET].[AMOUNT] else 0 end), 0),' + char(13) +
' @ORGANIZATIONTOTALRENEWALAMOUNT = isnull(sum(case when isnull(' + @ACTIONCODEFIELDNAME + ', 255) in (1, 2, 3) then [GIFTIDSET].[ORGANIZATIONAMOUNT] else 0 end), 0),' + char(13) +
' @ORGANIZATIONAVERAGERENEWALAMOUNT = isnull(avg(case when isnull(' + @ACTIONCODEFIELDNAME + ', 255) in (1, 2, 3) then [GIFTIDSET].[ORGANIZATIONAMOUNT] else 0 end), 0)' + char(13);
-- join to the activated data table
set @SQL = @SQL + 'from dbo.' + @GIFTIDSETNAME + ' as [GIFTIDSET]' + char(13) +
'inner join dbo.[' + @DATATABLE + '] as [DONORS] on [DONORS].[DONORID] = [GIFTIDSET].[DONORID]' + char(13);
if @ISBBEC = 1
set @SQL = @SQL + 'left outer join dbo.[FINANCIALTRANSACTIONLINEITEM] on [FINANCIALTRANSACTIONLINEITEM].[FINANCIALTRANSACTIONID] = [GIFTIDSET].[ID]' + char(13) +
'left outer join dbo.[MEMBERSHIPTRANSACTION] on [MEMBERSHIPTRANSACTION].[REVENUESPLITID] = [FINANCIALTRANSACTIONLINEITEM].[ID]' + char(13);
else
set @SQL = @SQL + 'TODO';
set @SQL = @SQL + @WHERESQL;
set @PARAMDEF = '@SEGMENTID uniqueidentifier, ' +
'@TESTSEGMENTID uniqueidentifier, ' +
'@ASOFDATE datetime, ' +
'@RENEWALS int output, ' +
'@UPGRADES int output, ' +
'@DOWNGRADES int output, ' +
'@TOTALRENEWALAMOUNT money output, ' +
'@AVERAGERENEWALAMOUNT money output, ' +
'@ORGANIZATIONTOTALRENEWALAMOUNT money output, ' +
'@ORGANIZATIONAVERAGERENEWALAMOUNT money output';
-- execute the SQL to get the counts/amounts
exec sp_executesql @SQL, @PARAMDEF,
@SEGMENTID = @SEGMENTID,
@TESTSEGMENTID = @TESTSEGMENTID,
@ASOFDATE = @ASOFDATE,
@RENEWALS = @RENEWALS output,
@UPGRADES = @UPGRADES output,
@DOWNGRADES = @DOWNGRADES output,
@TOTALRENEWALAMOUNT = @TOTALRENEWALAMOUNT output,
@AVERAGERENEWALAMOUNT = @AVERAGERENEWALAMOUNT output,
@ORGANIZATIONTOTALRENEWALAMOUNT = @ORGANIZATIONTOTALRENEWALAMOUNT output,
@ORGANIZATIONAVERAGERENEWALAMOUNT = @ORGANIZATIONAVERAGERENEWALAMOUNT output;
end
else -- @EXCLUDE = 1
begin
set @RENEWALS = 0;
set @UPGRADES = 0;
set @DOWNGRADES = 0;
set @TOTALRENEWALAMOUNT = 0;
set @AVERAGERENEWALAMOUNT = 0;
set @ORGANIZATIONTOTALRENEWALAMOUNT = 0;
set @ORGANIZATIONAVERAGERENEWALAMOUNT = 0;
end
-- return the values
select
@RENEWALS as [RENEWALS],
@UPGRADES as [UPGRADES],
@DOWNGRADES as [DOWNGRADES],
@TOTALRENEWALAMOUNT as [TOTALRENEWALAMOUNT],
@AVERAGERENEWALAMOUNT as [AVERAGERENEWALAMOUNT],
@ORGANIZATIONTOTALRENEWALAMOUNT as [ORGANIZATIONTOTALRENEWALAMOUNT],
@ORGANIZATIONAVERAGERENEWALAMOUNT as [ORGANIZATIONAVERAGERENEWALAMOUNT];
return 0;