USP_MKTSEGMENTATIONLIST_GETRESPONSECOUNTS
Returns the quantity mailed, number of responders, number of responses, total cost, total gift amount, and average gift amount for a list used in marketing efforts.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@LISTID | uniqueidentifier | IN | |
@SEGMENTATIONID | uniqueidentifier | IN | |
@SEGMENTID | uniqueidentifier | IN | |
@PACKAGEID | uniqueidentifier | IN | |
@ASOFDATE | datetime | IN |
Definition
Copy
CREATE procedure dbo.[USP_MKTSEGMENTATIONLIST_GETRESPONSECOUNTS]
(
@LISTID uniqueidentifier, --Required. The list to calculate response counts for.
@SEGMENTATIONID uniqueidentifier = null, --Optional. The mailing can be specified with or without the other optional parameters.
@SEGMENTID uniqueidentifier = null, --Optional. The mailing segment can be specified with or without the other optional parameters.
@PACKAGEID uniqueidentifier = null, --Optional. The package (from a mailing segment or test segment) can be specified with or without the other optional parameters.
@ASOFDATE datetime = null --Optional. The "as of" date to calculate response counts up to.
)
as
set nocount on;
declare @RECORDSOURCEID uniqueidentifier;
declare @LISTMATCHBACKTABLE nvarchar(128);
declare @DATATABLE nvarchar(128);
declare @GIFTIDSETNAME nvarchar(255);
declare @SQL nvarchar(max);
declare @LISTIDSQL nvarchar(128);
declare @WHERESQL nvarchar(max);
declare @QUANTITY int;
declare @TOTALCOST money;
declare @RESPONDERS int;
declare @RESPONSES int;
declare @TOTALGIFTAMOUNT money;
declare @TESTSEGMENTID uniqueidentifier;
declare @TESTSAMPLESIZE int;
declare @TESTSAMPLESIZETYPECODE tinyint;
declare @CONSOLIDATEDRECORDTYPES table([RECORDTYPEID] uniqueidentifier not null);
declare @RESPONSECOUNTS table([QUANTITY] int not null, [RESPONDERS] int not null, [RESPONSES] int not null, [TOTALCOST] money not null, [TOTALGIFTAMOUNT] money not null, [ORGANIZATIONTOTALCOST] money not null, [ORGANIZATIONTOTALGIFTAMOUNT] money not null);
declare @ORGANIZATIONTOTALGIFTAMOUNT money;
declare @ORGANIZATIONTOTALCOST money;
begin try
select
@RECORDSOURCEID = [MKTLIST].[RECORDSOURCEID],
@LISTMATCHBACKTABLE = dbo.[UFN_MKTRECORDSOURCE_MAKEMATCHBACKTABLENAME]([MKTLIST].[RECORDSOURCEID])
from dbo.[MKTLIST]
where [ID] = @LISTID;
--If the list is part of a consolidated list, then get all the record types for the consolidated list...
insert into @CONSOLIDATEDRECORDTYPES ([RECORDTYPEID])
select [IDSETRECORDTYPEID]
from dbo.[MKTSEGMENTLIST]
where [LISTID] = @LISTID
and [CONSOLIDATEDQUERYVIEWID] is not null;
create table #TEMP_LISTRESPONSECOUNTIDS (
[SEGMENTATIONID] uniqueidentifier not null,
[SEGMENTID] uniqueidentifier not null,
[TESTSEGMENTID] uniqueidentifier null,
[PACKAGEID] uniqueidentifier not null,
[TYPECODE] tinyint not null
);
--Get all the information we need for this list...
insert into #TEMP_LISTRESPONSECOUNTIDS ([SEGMENTATIONID], [SEGMENTID], [TESTSEGMENTID], [PACKAGEID], [TYPECODE])
--Imported list segments
select distinct
[MKTSEGMENTATION].[ID],
[MKTSEGMENTATIONSEGMENT].[ID],
null,
[MKTSEGMENTATIONSEGMENT].[PACKAGEID],
[MKTSEGMENTLIST].[TYPECODE]
from dbo.[MKTSEGMENTATION]
inner join dbo.[MKTSEGMENTATIONSEGMENT] on [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] = [MKTSEGMENTATION].[ID]
inner join dbo.[MKTSEGMENT] on [MKTSEGMENT].[ID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTID]
inner join dbo.[IDSETREGISTER] on [IDSETREGISTER].[ID] = [MKTSEGMENT].[IDSETREGISTERID]
inner join dbo.[MKTSEGMENTLIST] on [MKTSEGMENTLIST].[IDSETRECORDTYPEID] = [IDSETREGISTER].[RECORDTYPEID] or [MKTSEGMENTLIST].[IDSETRECORDTYPEID] in (select [RECORDTYPEID] from @CONSOLIDATEDRECORDTYPES)
where [MKTSEGMENTLIST].[LISTID] = @LISTID
and [MKTSEGMENTLIST].[TYPECODE] <> 1
and (@SEGMENTATIONID is null or [MKTSEGMENTATION].[ID] = @SEGMENTATIONID)
and (@SEGMENTID is null or [MKTSEGMENTATIONSEGMENT].[ID] = @SEGMENTID)
and (@PACKAGEID is null or [MKTSEGMENTATIONSEGMENT].[PACKAGEID] = @PACKAGEID)
union
--Imported list test segments
select distinct
[MKTSEGMENTATION].[ID],
[MKTSEGMENTATIONSEGMENT].[ID],
[MKTSEGMENTATIONTESTSEGMENT].[ID],
[MKTSEGMENTATIONTESTSEGMENT].[PACKAGEID],
[MKTSEGMENTLIST].[TYPECODE]
from dbo.[MKTSEGMENTATION]
inner join dbo.[MKTSEGMENTATIONSEGMENT] on [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] = [MKTSEGMENTATION].[ID]
inner join dbo.[MKTSEGMENTATIONTESTSEGMENT] on [MKTSEGMENTATIONTESTSEGMENT].[SEGMENTID] = [MKTSEGMENTATIONSEGMENT].[ID]
inner join dbo.[MKTSEGMENT] on [MKTSEGMENT].[ID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTID]
inner join dbo.[IDSETREGISTER] on [IDSETREGISTER].[ID] = [MKTSEGMENT].[IDSETREGISTERID]
inner join dbo.[MKTSEGMENTLIST] on [MKTSEGMENTLIST].[IDSETRECORDTYPEID] = [IDSETREGISTER].[RECORDTYPEID] or [MKTSEGMENTLIST].[IDSETRECORDTYPEID] in (select [RECORDTYPEID] from @CONSOLIDATEDRECORDTYPES)
where [MKTSEGMENTLIST].[LISTID] = @LISTID
and [MKTSEGMENTLIST].[TYPECODE] <> 1
and (@SEGMENTATIONID is null or [MKTSEGMENTATION].[ID] = @SEGMENTATIONID)
and (@SEGMENTID is null or [MKTSEGMENTATIONSEGMENT].[ID] = @SEGMENTID)
and (@PACKAGEID is null or [MKTSEGMENTATIONTESTSEGMENT].[PACKAGEID] = @PACKAGEID)
union
--Vendor managed list segments
select distinct
[MKTSEGMENTATION].[ID],
[MKTSEGMENTATIONSEGMENT].[ID],
null,
[MKTSEGMENTATIONSEGMENT].[PACKAGEID],
[MKTSEGMENTLIST].[TYPECODE]
from dbo.[MKTSEGMENTATION]
inner join dbo.[MKTSEGMENTATIONSEGMENT] on [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] = [MKTSEGMENTATION].[ID]
inner join dbo.[MKTSEGMENTATIONSEGMENTLIST] on [MKTSEGMENTATIONSEGMENTLIST].[ID] = [MKTSEGMENTATIONSEGMENT].[ID]
inner join dbo.[MKTSEGMENTLIST] on [MKTSEGMENTLIST].[ID] = [MKTSEGMENTATIONSEGMENTLIST].[SEGMENTLISTID]
where [MKTSEGMENTLIST].[LISTID] = @LISTID
and [MKTSEGMENTLIST].[TYPECODE] = 1
and (@SEGMENTATIONID is null or [MKTSEGMENTATION].[ID] = @SEGMENTATIONID)
and (@SEGMENTID is null or [MKTSEGMENTATIONSEGMENT].[ID] = @SEGMENTID)
and (@PACKAGEID is null or [MKTSEGMENTATIONSEGMENT].[PACKAGEID] = @PACKAGEID)
union
--Vendor managed list test segments
select distinct
[MKTSEGMENTATION].[ID],
[MKTSEGMENTATIONSEGMENT].[ID],
[MKTSEGMENTATIONTESTSEGMENT].[ID],
[MKTSEGMENTATIONTESTSEGMENT].[PACKAGEID],
[MKTSEGMENTLIST].[TYPECODE]
from dbo.[MKTSEGMENTATION]
inner join dbo.[MKTSEGMENTATIONSEGMENT] on [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] = [MKTSEGMENTATION].[ID]
inner join dbo.[MKTSEGMENTATIONTESTSEGMENT] on [MKTSEGMENTATIONTESTSEGMENT].[SEGMENTID] = [MKTSEGMENTATIONSEGMENT].[ID]
inner join dbo.[MKTSEGMENTATIONSEGMENTLIST] on [MKTSEGMENTATIONSEGMENTLIST].[ID] = [MKTSEGMENTATIONSEGMENT].[ID]
inner join dbo.[MKTSEGMENTLIST] on [MKTSEGMENTLIST].[ID] = [MKTSEGMENTATIONSEGMENTLIST].[SEGMENTLISTID]
where [MKTSEGMENTLIST].[LISTID] = @LISTID
and [MKTSEGMENTLIST].[TYPECODE] = 1
and (@SEGMENTATIONID is null or [MKTSEGMENTATION].[ID] = @SEGMENTATIONID)
and (@SEGMENTID is null or [MKTSEGMENTATIONSEGMENT].[ID] = @SEGMENTID)
and (@PACKAGEID is null or [MKTSEGMENTATIONTESTSEGMENT].[PACKAGEID] = @PACKAGEID);
declare MAILINGCURSOR cursor local fast_forward for
select distinct [SEGMENTATIONID]
from #TEMP_LISTRESPONSECOUNTIDS;
open MAILINGCURSOR;
fetch next from MAILINGCURSOR into @SEGMENTATIONID;
while (@@FETCH_STATUS = 0)
begin
select
@DATATABLE = dbo.[UFN_MKTSEGMENTATIONACTIVATE_MAKETABLENAME]([SEGMENTATIONID]),
@GIFTIDSETNAME = dbo.[UFN_MKTSELECTION_GETFUNCTIONNAME]([NORMALGIFTIDSETREGISTERID]),
@QUANTITY = 0,
@TOTALCOST = 0,
@RESPONDERS = 0,
@RESPONSES = 0,
@TOTALGIFTAMOUNT = 0,
@WHERESQL = '',
@ORGANIZATIONTOTALCOST = 0,
@ORGANIZATIONTOTALGIFTAMOUNT = 0
from dbo.[MKTSEGMENTATIONACTIVATE]
where [SEGMENTATIONID] = @SEGMENTATIONID
and [RECORDSOURCEID] = @RECORDSOURCEID;
if @ASOFDATE is not null
set @WHERESQL = 'and [GIFTIDSET].[DATE] <= @ASOFDATE' + char(13);
--Get the imported list quantity and cost (if any exist) from the activated data table...
if exists(select 1 from #TEMP_LISTRESPONSECOUNTIDS where [SEGMENTATIONID] = @SEGMENTATIONID and [TYPECODE] = 0)
begin
if exists(select 1 from #TEMP_LISTRESPONSECOUNTIDS where [SEGMENTATIONID] = @SEGMENTATIONID and [TYPECODE] = 0 and [TESTSEGMENTID] is null)
begin
--Get the quantity for any segments...
set @SQL = 'select' + char(13) +
' @QUANTITY = count([DONORS].[DONORID])' + char(13) +
'from dbo.[' + @DATATABLE + '] as [DONORS]' + char(13) +
'inner join #TEMP_LISTRESPONSECOUNTIDS as [TEMP] on [TEMP].[SEGMENTID] = [DONORS].[SEGMENTID] and [TEMP].[TESTSEGMENTID] is null' + char(13) +
'inner join dbo.[MKTSEGMENTATIONSEGMENT] on [MKTSEGMENTATIONSEGMENT].[ID] = [TEMP].[SEGMENTID]' + char(13) +
'inner join dbo.[MKTSEGMENTATIONSEGMENTACTIVE] on ([MKTSEGMENTATIONSEGMENTACTIVE].[SEGMENTID] = [MKTSEGMENTATIONSEGMENT].[ID] and [MKTSEGMENTATIONSEGMENTACTIVE].[TESTSEGMENTID] is null)' + char(13) +
'inner join dbo.[MKTSEGMENTATIONPACKAGE] on [MKTSEGMENTATIONPACKAGE].[SEGMENTATIONID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] and [MKTSEGMENTATIONPACKAGE].[PACKAGEID] = [MKTSEGMENTATIONSEGMENT].[PACKAGEID]' + char(13) +
'inner join dbo.[MKTSEGMENTLIST] on [MKTSEGMENTLIST].[QUERYVIEWCATALOGID] = [DONORS].[DONORQUERYVIEWCATALOGID]' + char(13) +
'where [TEMP].[TYPECODE] = 0' + char(13) +
'and [DONORS].[TESTSEGMENTID] is null' + char(13) +
'and [MKTSEGMENTLIST].[LISTID] = @LISTID' + char(13) +
'and [MKTSEGMENTATIONSEGMENT].[PACKAGEID] = [TEMP].[PACKAGEID]';
exec sp_executesql @SQL, N'@LISTID uniqueidentifier, @QUANTITY int output', @LISTID = @LISTID, @QUANTITY = @QUANTITY output;
-- add the cost of any segments
select
@TOTALCOST = @TOTALCOST + isnull(sum([MKTSEGMENTATIONSEGMENTACTIVE].[TOTALCOST]), 0),
@ORGANIZATIONTOTALCOST = @ORGANIZATIONTOTALCOST + isnull(sum([MKTSEGMENTATIONSEGMENTACTIVE].[ORGANIZATIONTOTALCOST]), 0)
from #TEMP_LISTRESPONSECOUNTIDS as [TEMP]
inner join dbo.[MKTSEGMENTATIONSEGMENT] on ([MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] = [TEMP].[SEGMENTATIONID] and [MKTSEGMENTATIONSEGMENT].[ID] = [TEMP].[SEGMENTID] and [MKTSEGMENTATIONSEGMENT].[PACKAGEID] = [TEMP].[PACKAGEID])
inner join dbo.[MKTSEGMENTATIONSEGMENTACTIVE] on ([MKTSEGMENTATIONSEGMENTACTIVE].[SEGMENTID] = [MKTSEGMENTATIONSEGMENT].[ID] and [MKTSEGMENTATIONSEGMENTACTIVE].[TESTSEGMENTID] is null)
where [TEMP].[TYPECODE] = 0;
end
if exists(select 1 from #TEMP_LISTRESPONSECOUNTIDS where [SEGMENTATIONID] = @SEGMENTATIONID and [TYPECODE] = 0 and [TESTSEGMENTID] is not null)
begin
--Get the quantity for any test segments...
set @SQL = 'select' + char(13) +
' @QUANTITY = @QUANTITY + count([DONORS].[DONORID])' + char(13) +
'from dbo.[' + @DATATABLE + '] as [DONORS]' + char(13) +
'inner join #TEMP_LISTRESPONSECOUNTIDS as [TEMP] on [TEMP].[SEGMENTID] = [DONORS].[SEGMENTID] and [TEMP].[TESTSEGMENTID] = [DONORS].[TESTSEGMENTID]' + char(13) +
'inner join dbo.[MKTSEGMENTATIONSEGMENT] on [MKTSEGMENTATIONSEGMENT].[ID] = [TEMP].[SEGMENTID]' + char(13) +
'inner join dbo.[MKTSEGMENTATIONSEGMENTACTIVE] on ([MKTSEGMENTATIONSEGMENTACTIVE].[SEGMENTID] = [MKTSEGMENTATIONSEGMENT].[ID] and [MKTSEGMENTATIONSEGMENTACTIVE].[TESTSEGMENTID] = [TEMP].[TESTSEGMENTID])' + char(13) +
'inner join dbo.[MKTSEGMENTATIONTESTSEGMENT] on [MKTSEGMENTATIONTESTSEGMENT].[ID] = [TEMP].[TESTSEGMENTID]' + char(13) +
'inner join dbo.[MKTSEGMENTATIONPACKAGE] on [MKTSEGMENTATIONPACKAGE].[SEGMENTATIONID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] and [MKTSEGMENTATIONPACKAGE].[PACKAGEID] = [MKTSEGMENTATIONTESTSEGMENT].[PACKAGEID]' + char(13) +
'inner join dbo.[MKTSEGMENTLIST] on [MKTSEGMENTLIST].[QUERYVIEWCATALOGID] = [DONORS].[DONORQUERYVIEWCATALOGID]' + char(13) +
'where [TEMP].[TYPECODE] = 0' + char(13) +
'and [MKTSEGMENTLIST].[LISTID] = @LISTID' + char(13) +
'and [MKTSEGMENTATIONTESTSEGMENT].[PACKAGEID] = [TEMP].[PACKAGEID]';
exec sp_executesql @SQL, N'@LISTID uniqueidentifier, @QUANTITY int output', @LISTID = @LISTID, @QUANTITY = @QUANTITY output;
-- add the cost of any test segments
select
@TOTALCOST = @TOTALCOST + isnull(sum([MKTSEGMENTATIONSEGMENTACTIVE].[TOTALCOST]), 0),
@ORGANIZATIONTOTALCOST = @ORGANIZATIONTOTALCOST + isnull(sum([MKTSEGMENTATIONSEGMENTACTIVE].[ORGANIZATIONTOTALCOST]), 0)
from #TEMP_LISTRESPONSECOUNTIDS as [TEMP]
inner join dbo.[MKTSEGMENTATIONSEGMENT] on ([MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] = [TEMP].[SEGMENTATIONID] and [MKTSEGMENTATIONSEGMENT].[ID] = [TEMP].[SEGMENTID])
inner join dbo.[MKTSEGMENTATIONTESTSEGMENT] on ([MKTSEGMENTATIONTESTSEGMENT].[SEGMENTID] = [MKTSEGMENTATIONSEGMENT].[ID] and [MKTSEGMENTATIONTESTSEGMENT].[ID] = [TEMP].[TESTSEGMENTID] and [MKTSEGMENTATIONSEGMENT].[PACKAGEID] = [TEMP].[PACKAGEID])
inner join dbo.[MKTSEGMENTATIONSEGMENTACTIVE] on ([MKTSEGMENTATIONSEGMENTACTIVE].[SEGMENTID] = [MKTSEGMENTATIONSEGMENT].[ID] and [MKTSEGMENTATIONSEGMENTACTIVE].[TESTSEGMENTID] = [MKTSEGMENTATIONTESTSEGMENT].[ID])
where [TEMP].[TYPECODE] = 0;
end
end
--Get the vendor managed list quantity and cost (if any exist) from the individual segments...
if exists(select 1 from #TEMP_LISTRESPONSECOUNTIDS where [SEGMENTATIONID] = @SEGMENTATIONID and [TYPECODE] = 1)
begin
declare SEGMENTCURSOR cursor local fast_forward for
select [SEGMENTID], [TESTSEGMENTID]
from #TEMP_LISTRESPONSECOUNTIDS
where [SEGMENTATIONID] = @SEGMENTATIONID
and [TYPECODE] = 1;
open SEGMENTCURSOR;
fetch next from SEGMENTCURSOR into @SEGMENTID, @TESTSEGMENTID;
while (@@FETCH_STATUS = 0)
begin
--Since this is a vendor managed list segment/test segment, we need to get the total offers from the segment and
--calculate the offers for each test segment taking into account fractions/percents and distributing any remainders.
set @QUANTITY += dbo.[UFN_MKTSEGMENTATIONSEGMENTLIST_GETVENDORMANAGEDQUANTITY](@SEGMENTID, @TESTSEGMENTID);
if @TESTSEGMENTID is null
begin
-- add the total cost for the segment
select
@TOTALCOST = @TOTALCOST + [MKTSEGMENTATIONSEGMENTACTIVE].[TOTALCOST],
@ORGANIZATIONTOTALCOST = @ORGANIZATIONTOTALCOST + [MKTSEGMENTATIONSEGMENTACTIVE].[ORGANIZATIONTOTALCOST]
from dbo.[MKTSEGMENTATIONSEGMENT]
inner join dbo.[MKTSEGMENTATIONSEGMENTACTIVE] on ([MKTSEGMENTATIONSEGMENTACTIVE].[SEGMENTID] = [MKTSEGMENTATIONSEGMENT].[ID] and [MKTSEGMENTATIONSEGMENTACTIVE].[TESTSEGMENTID] is null)
inner join dbo.[MKTSEGMENTATIONPACKAGE] on [MKTSEGMENTATIONPACKAGE].[SEGMENTATIONID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] and [MKTSEGMENTATIONPACKAGE].[PACKAGEID] = [MKTSEGMENTATIONSEGMENT].[PACKAGEID]
where [MKTSEGMENTATIONSEGMENT].[ID] = @SEGMENTID;
end
else
begin
-- add the total cost for the test segment
select
@TOTALCOST = @TOTALCOST + [MKTSEGMENTATIONSEGMENTACTIVE].[TOTALCOST],
@ORGANIZATIONTOTALCOST = @ORGANIZATIONTOTALCOST + [MKTSEGMENTATIONSEGMENTACTIVE].[ORGANIZATIONTOTALCOST]
from dbo.[MKTSEGMENTATIONSEGMENT]
inner join dbo.[MKTSEGMENTATIONTESTSEGMENT] on [MKTSEGMENTATIONTESTSEGMENT].[SEGMENTID] = [MKTSEGMENTATIONSEGMENT].[ID]
inner join dbo.[MKTSEGMENTATIONSEGMENTACTIVE] on ([MKTSEGMENTATIONSEGMENTACTIVE].[SEGMENTID] = [MKTSEGMENTATIONSEGMENT].[ID] and [MKTSEGMENTATIONSEGMENTACTIVE].[TESTSEGMENTID] = [MKTSEGMENTATIONTESTSEGMENT].[ID])
inner join dbo.[MKTSEGMENTATIONPACKAGE] on [MKTSEGMENTATIONPACKAGE].[SEGMENTATIONID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] and [MKTSEGMENTATIONPACKAGE].[PACKAGEID] = [MKTSEGMENTATIONTESTSEGMENT].[PACKAGEID]
where [MKTSEGMENTATIONTESTSEGMENT].[ID] = @TESTSEGMENTID;
end
fetch next from SEGMENTCURSOR into @SEGMENTID, @TESTSEGMENTID;
end
close SEGMENTCURSOR;
deallocate SEGMENTCURSOR;
set @WHERESQL = @WHERESQL + 'and [GIFTIDSET].[SOURCECODE] = [DONORS].[SOURCECODE]';
end
--See if we need to cast the person ID from the list matchback table(s) in the list joins...
select @LISTIDSQL = (case when [DATA_TYPE] = 'uniqueidentifier' then '[LISTDONORS].[ID]' else 'cast(isnull([LISTDONORS].[ID],'''') as varchar(36))' end)
from [INFORMATION_SCHEMA].[COLUMNS]
where [TABLE_SCHEMA] = 'dbo'
and [TABLE_NAME] = @DATATABLE
and [COLUMN_NAME] = 'DONORID';
--Build the sql for retrieving response counts for the list...
if exists(select 1 from #TEMP_LISTRESPONSECOUNTIDS where [SEGMENTATIONID] = @SEGMENTATIONID and [TESTSEGMENTID] is null)
begin
--Get the counts for any segments...
set @SQL = 'select' + char(13) +
' @RESPONDERS = count(distinct([DONORS].[DONORID])),' + char(13) +
' @RESPONSES = count([DONORS].[DONORID]),' + char(13) +
' @TOTALGIFTAMOUNT = isnull(sum([GIFTIDSET].[AMOUNT]),0),' + char(13) +
' @ORGANIZATIONTOTALGIFTAMOUNT = isnull(sum([GIFTIDSET].[ORGANIZATIONAMOUNT]),0)' + char(13) +
'from dbo.[' + @DATATABLE + '] as [DONORS]' + char(13) +
'inner join #TEMP_LISTRESPONSECOUNTIDS as [TEMP] on [TEMP].[SEGMENTID] = [DONORS].[SEGMENTID] and [TEMP].[TESTSEGMENTID] is null' + char(13) +
'inner join dbo.[' + @LISTMATCHBACKTABLE + '] as [LISTDONORS] on ' + @LISTIDSQL + ' = [DONORS].[DONORID] and [LISTDONORS].[SEGMENTATIONID] = @SEGMENTATIONID' + char(13) +
'inner join dbo.' + @GIFTIDSETNAME + ' as [GIFTIDSET] on [GIFTIDSET].[ID] = [LISTDONORS].[GIFTID]' + char(13) +
'inner join dbo.[MKTSEGMENTATIONSEGMENT] on [MKTSEGMENTATIONSEGMENT].[ID] = [TEMP].[SEGMENTID]' + char(13) +
'where [DONORS].[TESTSEGMENTID] is null' + char(13) +
'and [MKTSEGMENTATIONSEGMENT].[PACKAGEID] = [TEMP].[PACKAGEID]' + char(13) +
@WHERESQL;
--Execute the SQL to get the response counts...
exec sp_executesql @SQL, N'@SEGMENTATIONID uniqueidentifier, @ASOFDATE datetime, @RESPONDERS int output, @RESPONSES int output, @TOTALGIFTAMOUNT money output, @ORGANIZATIONTOTALGIFTAMOUNT money output',
@SEGMENTATIONID = @SEGMENTATIONID,
@ASOFDATE = @ASOFDATE,
@RESPONDERS = @RESPONDERS output,
@RESPONSES = @RESPONSES output,
@TOTALGIFTAMOUNT = @TOTALGIFTAMOUNT output,
@ORGANIZATIONTOTALGIFTAMOUNT = @ORGANIZATIONTOTALGIFTAMOUNT output;
end
if exists(select 1 from #TEMP_LISTRESPONSECOUNTIDS where [SEGMENTATIONID] = @SEGMENTATIONID and [TESTSEGMENTID] is not null)
begin
--Get the counts for any test segments...
set @SQL = 'select' + char(13) +
' @RESPONDERS = @RESPONDERS + count(distinct([DONORS].[DONORID])),' + char(13) +
' @RESPONSES = @RESPONSES + count([DONORS].[DONORID]),' + char(13) +
' @TOTALGIFTAMOUNT = @TOTALGIFTAMOUNT + isnull(sum([GIFTIDSET].[AMOUNT]),0),' + char(13) +
' @ORGANIZATIONTOTALGIFTAMOUNT = @ORGANIZATIONTOTALGIFTAMOUNT + isnull(sum([GIFTIDSET].[ORGANIZATIONAMOUNT]),0)' + char(13) +
'from dbo.[' + @DATATABLE + '] as [DONORS]' + char(13) +
'inner join #TEMP_LISTRESPONSECOUNTIDS as [TEMP] on [TEMP].[SEGMENTID] = [DONORS].[SEGMENTID] and [TEMP].[TESTSEGMENTID] = [DONORS].[TESTSEGMENTID]' + char(13) +
'inner join dbo.[' + @LISTMATCHBACKTABLE + '] as [LISTDONORS] on ' + @LISTIDSQL + ' = [DONORS].[DONORID] and [LISTDONORS].[SEGMENTATIONID] = @SEGMENTATIONID' + char(13) +
'inner join dbo.' + @GIFTIDSETNAME + ' as [GIFTIDSET] on [GIFTIDSET].[ID] = [LISTDONORS].[GIFTID]' + char(13) +
'inner join dbo.[MKTSEGMENTATIONSEGMENT] on [MKTSEGMENTATIONSEGMENT].[ID] = [TEMP].[SEGMENTID]' + char(13) +
'inner join dbo.[MKTSEGMENTATIONTESTSEGMENT] on [MKTSEGMENTATIONTESTSEGMENT].[ID] = [TEMP].[TESTSEGMENTID]' + char(13) +
'where [MKTSEGMENTATIONTESTSEGMENT].[PACKAGEID] = [TEMP].[PACKAGEID]' + char(13) +
@WHERESQL;
--Execute the SQL to get the response counts...
exec sp_executesql @SQL, N'@SEGMENTATIONID uniqueidentifier, @ASOFDATE datetime, @RESPONDERS int output, @RESPONSES int output, @TOTALGIFTAMOUNT money output, @ORGANIZATIONTOTALGIFTAMOUNT money output',
@SEGMENTATIONID = @SEGMENTATIONID,
@ASOFDATE = @ASOFDATE,
@RESPONDERS = @RESPONDERS output,
@RESPONSES = @RESPONSES output,
@TOTALGIFTAMOUNT = @TOTALGIFTAMOUNT output,
@ORGANIZATIONTOTALGIFTAMOUNT = @ORGANIZATIONTOTALGIFTAMOUNT output;
end
insert into @RESPONSECOUNTS (
[QUANTITY],
[RESPONDERS],
[RESPONSES],
[TOTALCOST],
[TOTALGIFTAMOUNT],
[ORGANIZATIONTOTALCOST],
[ORGANIZATIONTOTALGIFTAMOUNT]
) values (
@QUANTITY,
@RESPONDERS,
@RESPONSES,
@TOTALCOST,
@TOTALGIFTAMOUNT,
@ORGANIZATIONTOTALCOST,
@ORGANIZATIONTOTALGIFTAMOUNT
);
fetch next from MAILINGCURSOR into @SEGMENTATIONID;
end
close MAILINGCURSOR;
deallocate MAILINGCURSOR;
--Drop the temp table...
drop table #TEMP_LISTRESPONSECOUNTIDS;
--Return the values
select
isnull(sum([QUANTITY]),0) as [QUANTITY],
isnull(sum([RESPONDERS]),0) as [RESPONDERS],
isnull(sum([RESPONSES]),0) as [RESPONSES],
isnull(sum([TOTALCOST]),0) as [TOTALCOST],
isnull(sum([TOTALGIFTAMOUNT]),0) as [TOTALGIFTAMOUNT],
(case when isnull(sum([RESPONSES]),0) > 0 then cast(sum([TOTALGIFTAMOUNT]) as money) / cast(sum([RESPONSES]) as money) else 0 end) as [AVERAGEGIFTAMOUNT],
isnull(sum([ORGANIZATIONTOTALCOST]),0) as [ORGANIZATIONTOTALCOST],
isnull(sum([ORGANIZATIONTOTALGIFTAMOUNT]),0) as [ORGANIZATIONTOTALGIFTAMOUNT],
(case when isnull(sum([RESPONSES]),0) > 0 then cast(sum([ORGANIZATIONTOTALGIFTAMOUNT]) as money) / cast(sum([RESPONSES]) as money) else 0 end) as [ORGANIZATIONAVERAGEGIFTAMOUNT]
from @RESPONSECOUNTS;
end try
begin catch
exec dbo.[USP_RAISE_ERROR];
--Drop the temp table...
drop table #TEMP_LISTRESPONSECOUNTIDS;
return 1;
end catch
return 0;