USP_DATALIST_MKTLISTPERFORMANCE
Datalist of each acquisition list and performance data for each.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@SELECTIONID | uniqueidentifier | IN | List selection |
@STARTDATE | datetime | IN | Mailed from date |
@ENDDATE | datetime | IN | Mailed to date |
@CURRENTAPPUSERID | uniqueidentifier | IN | Input parameter indicating the ID of the current user. |
@SECURITYFEATUREID | uniqueidentifier | IN | Input parameter indicating the ID of the feature to use for site security checking. |
@SECURITYFEATURETYPE | tinyint | IN | Input parameter indicating the type of the feature to use for site security checking. |
@CURRENCYCODE | tinyint | IN | Currency |
Definition
Copy
CREATE procedure dbo.[USP_DATALIST_MKTLISTPERFORMANCE]
(
@SELECTIONID uniqueidentifier = null,
@STARTDATE datetime = null,
@ENDDATE datetime = null,
@CURRENTAPPUSERID uniqueidentifier = null,
@SECURITYFEATUREID uniqueidentifier = null,
@SECURITYFEATURETYPE tinyint = null,
@CURRENCYCODE tinyint = 1
)
with execute as owner
as
set nocount on;
declare @SELECTIONNAME nvarchar(300);
declare @SQL nvarchar(max);
declare @LISTCURSOR cursor;
declare @LISTID uniqueidentifier;
declare @SELECTIONISLIST bit = case when exists (select * from dbo.[MKTLIST] where [ID] = @SELECTIONID) then 1 else 0 end;
/* Get multicurrency values for the organization */
declare @ISO4217 nvarchar(100);
declare @DECIMALDIGITS tinyint;
declare @CURRENCYSYMBOL nvarchar(5);
declare @SYMBOLDISPLAYSETTINGCODE tinyint;
select
@ISO4217 = [CURRENCY].[ISO4217],
@DECIMALDIGITS = [CURRENCY].[DECIMALDIGITS],
@CURRENCYSYMBOL = [CURRENCY].[CURRENCYSYMBOL],
@SYMBOLDISPLAYSETTINGCODE = [CURRENCY].[SYMBOLDISPLAYSETTINGCODE]
from dbo.[CURRENCY]
where [CURRENCY].[ID] = dbo.[UFN_CURRENCY_GETORGANIZATIONCURRENCY]();
declare @ALL table (
[SELECTIONNAME] nvarchar(300),
[LISTID] uniqueidentifier,
[LISTNAME] nvarchar(43),
[SEGMENTID] uniqueidentifier,
[SEGMENTNAME] nvarchar(100),
[PACKAGEID] uniqueidentifier,
[PACKAGENAME] nvarchar(100),
[MAILINGID] uniqueidentifier,
[MAILINGNAME] nvarchar(100),
[QUANTITY] int,
[TOTALCOST] money,
[RESPONSES] int,
[TOTALREVENUE] money,
[COSTPERPIECE] money,
[RESPONSERATE] decimal(19,4),
[AVGGIFT] money,
[REVENUEPERPIECE] money
);
if @ENDDATE is null
set @ENDDATE = getdate();
if @STARTDATE is null
set @STARTDATE = dateadd(yy, -1, @ENDDATE);
--To put the selection name on the report
select
@SELECTIONNAME = [NAME]
from dbo.[IDSETREGISTER]
where [ID] = @SELECTIONID;
--Loop through all lists (or lists in the selection), and gather response and cost information...
if @SELECTIONISLIST = 1
begin
declare @SELECTIONLISTID uniqueidentifier = @SELECTIONID;
set @SQL = 'set @LISTCURSOR = cursor local fast_forward for' + char(13) +
' select [ID]' + char(13) +
' from dbo.[MKTLIST] where [ID] = ''' + convert(nvarchar(36), @SELECTIONLISTID) + ''';' + char(13) +
'open @LISTCURSOR;';
end
else
set @SQL = 'set @LISTCURSOR = cursor local fast_forward for' + char(13) +
' select [ID]' + char(13) +
' from dbo.' + (case when @SELECTIONID is null then '[MKTLIST]' else dbo.[UFN_MKTSELECTION_GETFUNCTIONNAME](@SELECTIONID) end) + ';' + char(13) +
'open @LISTCURSOR;';
exec sp_executesql @SQL, N'@LISTCURSOR cursor output', @LISTCURSOR = @LISTCURSOR output;
fetch next from @LISTCURSOR into @LISTID;
while (@@FETCH_STATUS = 0)
begin
insert into @ALL
select
@SELECTIONNAME,
[LISTID],
[LISTNAME],
[SEGMENTID],
[SEGMENTNAME],
[PACKAGEID],
[PACKAGENAME],
[MAILINGID],
[MAILINGNAME],
[QUANTITY] as [QUANTITY],
[TOTALCOST] as [TOTALCOST],
[RESPONSES] as [RESPONSES],
[TOTALGIFTAMOUNT] as [TOTALREVENUE],
cast((case when [QUANTITY] > 0 then [TOTALCOST] / [QUANTITY] else 0 end) as money) as [COSTPERPIECE],
cast((case when [QUANTITY] > 0 then cast([RESPONSES] as decimal(19,4)) / cast([QUANTITY] as decimal(19,4)) else 0 end) as decimal(19,4)) as [RESPONSERATE],
cast((case when [RESPONSES] > 0 then [TOTALGIFTAMOUNT] / [RESPONSES] else 0 end) as money) as [AVGGIFT],
cast((case when [QUANTITY] > 0 then [TOTALGIFTAMOUNT] / [QUANTITY] else 0 end) as money) as [REVENUEPERPIECE]
from (
select
[MKTLIST].[ID] as [LISTID],
[MKTLIST].[NAME] as [LISTNAME],
[MKTSEGMENT].[ID] as [SEGMENTID],
[MKTSEGMENT].[NAME] as [SEGMENTNAME],
[MKTSEGMENTATION].[ID] as [MAILINGID],
[MKTSEGMENTATION].[NAME] as [MAILINGNAME],
[MKTPACKAGE].[ID] as [PACKAGEID],
[MKTPACKAGE].[NAME] as [PACKAGENAME],
isnull(sum([MKTSEGMENTATIONLISTACTIVE].[QUANTITY]), 0) as [QUANTITY],
isnull(sum([MKTSEGMENTATIONLISTACTIVE].[ORGANIZATIONTOTALCOST]), 0) as [TOTALCOST],
isnull(sum([MKTSEGMENTATIONLISTACTIVE].[RESPONSES]), 0) as [RESPONSES],
isnull(sum([MKTSEGMENTATIONLISTACTIVE].[ORGANIZATIONTOTALGIFTAMOUNT]), 0) as [TOTALGIFTAMOUNT]
from dbo.[MKTLIST]
inner join dbo.[MKTSEGMENTATIONLISTACTIVE] on [MKTSEGMENTATIONLISTACTIVE].[LISTID] = [MKTLIST].[ID]
inner join dbo.[MKTSEGMENTATIONSEGMENT] on [MKTSEGMENTATIONSEGMENT].[ID] = [MKTSEGMENTATIONLISTACTIVE].[SEGMENTID]
inner join dbo.[MKTSEGMENTATION] on [MKTSEGMENTATION].[ID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID]
inner join dbo.[MKTPACKAGE] on [MKTPACKAGE].[ID] = [MKTSEGMENTATIONLISTACTIVE].[PACKAGEID]
inner join dbo.[MKTSEGMENT] on [MKTSEGMENT].[ID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTID]
where (dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 1 or exists (select 1 from dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID,@SECURITYFEATUREID,@SECURITYFEATURETYPE) where SITEID=[MKTSEGMENTATION].[SITEID] or (SITEID is null and [MKTSEGMENTATION].[SITEID] is null)))
and [MKTLIST].[ID] = @LISTID
and isnull([MKTSEGMENTATION].[MAILDATE], cast([MKTSEGMENTATION].[ACTIVATEDATE] as date)) between @STARTDATE and @ENDDATE
group by
[MKTLIST].[ID],
[MKTLIST].[NAME],
[MKTSEGMENT].[ID],
[MKTSEGMENT].[NAME],
[MKTSEGMENTATION].[ID],
[MKTSEGMENTATION].[NAME],
[MKTPACKAGE].[ID],
[MKTPACKAGE].[NAME]
) as [INNER];
fetch next from @LISTCURSOR into @LISTID;
end
close @LISTCURSOR;
deallocate @LISTCURSOR;
--if no result rows return parameters only
if (select count(*) from @ALL) = 0
insert into @ALL ([SELECTIONNAME]) values (@SELECTIONNAME);
--Display
select
[SELECTIONNAME],
[LISTID],
[LISTNAME],
[SEGMENTID],
[SEGMENTNAME],
[PACKAGEID],
[PACKAGENAME],
[MAILINGID],
[MAILINGNAME],
[QUANTITY],
[TOTALCOST],
[RESPONSES],
[TOTALREVENUE],
[COSTPERPIECE],
[RESPONSERATE],
[AVGGIFT],
[REVENUEPERPIECE],
@ISO4217 as [CURRENCYISOCURRENCYCODE],
@DECIMALDIGITS as [CURRENCYDECIMALDIGITS],
@CURRENCYSYMBOL as [CURRENCYSYMBOL],
@SYMBOLDISPLAYSETTINGCODE as [CURRENCYSYMBOLDISPLAYSETTINGCODE]
from @ALL
order by
[LISTNAME],
[SEGMENTNAME],
[PACKAGENAME],
[MAILINGNAME];
return 0;