USP_REPORT_APPEALPERFORMANCE_BYMAILING
Retrieve appeal performance broken out by mailing.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@STARTDATE | datetime | IN | |
@ENDDATE | datetime | IN | |
@CATEGORYID | uniqueidentifier | IN | |
@BUSINESSUNITID | uniqueidentifier | IN | |
@REPORTCODEID | uniqueidentifier | IN | |
@SITEID | uniqueidentifier | IN | |
@REPORTUSERID | nvarchar(128) | IN | |
@APPEALID | uniqueidentifier | IN | |
@CURRENCYCODE | tinyint | IN | |
@ALTREPORTUSERID | nvarchar(128) | IN |
Definition
Copy
CREATE procedure dbo.[USP_REPORT_APPEALPERFORMANCE_BYMAILING]
(
@STARTDATE datetime = null,
@ENDDATE datetime = null,
@CATEGORYID uniqueidentifier = null,
@BUSINESSUNITID uniqueidentifier = null,
@REPORTCODEID uniqueidentifier = null,
@SITEID uniqueidentifier = null,
@REPORTUSERID nvarchar(128) = null,
@APPEALID uniqueidentifier = null,
@CURRENCYCODE tinyint = null,
@ALTREPORTUSERID nvarchar(128) = null
)
as
set nocount on;
set transaction isolation level read uncommitted;
declare @CURRENTAPPUSERID uniqueidentifier = dbo.[UFN_APPUSER_GETREPORTAPPUSERID](@REPORTUSERID, @ALTREPORTUSERID);
declare @ISSYSADMIN as bit = dbo.[UFN_APPUSER_ISSYSADMIN](@CURRENTAPPUSERID);
declare @SELECTEDCURRENCYID uniqueidentifier;
declare @ORGANIZATIONCURRENCYID uniqueidentifier = dbo.[UFN_CURRENCY_GETORGANIZATIONCURRENCY]();
declare @DECIMALDIGITS tinyint;
declare @ROUNDINGTYPECODE tinyint;
if @STARTDATE is not null
set @STARTDATE = dbo.[UFN_DATE_GETEARLIESTTIME](@STARTDATE);
if @ENDDATE is not null
set @ENDDATE = dbo.[UFN_DATE_GETLATESTTIME](@ENDDATE);
if @CURRENCYCODE = 0
set @SELECTEDCURRENCYID = null;
else if @CURRENCYCODE = 2
set @SELECTEDCURRENCYID = dbo.[UFN_APPUSER_GETBASECURRENCY](@CURRENTAPPUSERID);
else
begin
set @CURRENCYCODE = 1;
set @SELECTEDCURRENCYID = @ORGANIZATIONCURRENCYID;
end
select
@DECIMALDIGITS = [DECIMALDIGITS],
@ROUNDINGTYPECODE = [ROUNDINGTYPECODE]
from dbo.[CURRENCY]
where [ID] = @SELECTEDCURRENCYID;
declare @APPEALS table (
[ID] uniqueidentifier not null primary key,
[NAME] nvarchar(100) not null,
[GOAL] money,
[CURRENCYID] uniqueidentifier,
[CURRENCYISO] nvarchar(3),
[CURRENCYDECIMALDIGITS] tinyint,
[CURRENCYSYMBOL] nvarchar(5),
[CURRENCYSYMBOLDISPLAYSETTINGCODE] tinyint
);
--All appeals that meet the criteria
insert into @APPEALS ([ID], [NAME], [GOAL], [CURRENCYID], [CURRENCYISO], [CURRENCYDECIMALDIGITS], [CURRENCYSYMBOL], [CURRENCYSYMBOLDISPLAYSETTINGCODE])
select distinct
[APPEAL].[ID],
[APPEAL].[NAME],
[APPEAL].[GOALINCURRENCY],
[CURRENCYPROPERTIES].[ID] as [CURRENCYID],
[CURRENCYPROPERTIES].[ISO4217] as [CURRENCYISO],
[CURRENCYPROPERTIES].[DECIMALDIGITS] as [CURRENCYDECIMALDIGITS],
[CURRENCYPROPERTIES].[CURRENCYSYMBOL] as [CURRENCYSYMBOL],
[CURRENCYPROPERTIES].[SYMBOLDISPLAYSETTINGCODE] as [CURRENCYSYMBOLDISPLAYSETTINGCODE]
from dbo.[UFN_APPEAL_GETGOALINCURRENCY_BULK2](@SELECTEDCURRENCYID, @ORGANIZATIONCURRENCYID, @DECIMALDIGITS, @ROUNDINGTYPECODE, 1) as [APPEAL]
/*#IDSETEXTENSION*/
left join dbo.[APPEALBUSINESSUNIT] on [APPEALBUSINESSUNIT].[APPEALID] = [APPEAL].[ID]
outer apply dbo.[UFN_CURRENCY_GETPROPERTIES](isnull(@SELECTEDCURRENCYID, [APPEAL].[BASECURRENCYID])) as [CURRENCYPROPERTIES]
where (@REPORTCODEID is null or [APPEAL].[APPEALREPORT1CODEID] = @REPORTCODEID)
and (@CATEGORYID is null or [APPEAL].[APPEALCATEGORYCODEID] = @CATEGORYID)
and (@BUSINESSUNITID is null or [APPEALBUSINESSUNIT].[BUSINESSUNITCODEID] = @BUSINESSUNITID)
and (@SITEID is null or [APPEAL].[SITEID] = @SITEID)
and (@ISSYSADMIN = 1 or dbo.[UFN_SITEALLOWEDFORUSER](@CURRENTAPPUSERID, [APPEAL].[SITEID]) = 1)
and (@APPEALID is null or [APPEAL].[ID] = @APPEALID);
if object_id('tempdb..#APPEALPLEDGESPAID') is not null
drop table #APPEALPLEDGESPAID;
create table #APPEALPLEDGESPAID (
[APPEALID] uniqueidentifier not null,
[MAILINGID] uniqueidentifier,
[PLEDGEPAIDAMOUNT] money
);
--Paid pledges that match the appeal and meets the date criteria
insert into #APPEALPLEDGESPAID ([APPEALID], [MAILINGID], [PLEDGEPAIDAMOUNT])
select
[REVENUE_EXT].[APPEALID],
[REVENUE_EXT].[MAILINGID],
isnull(sum([REVENUESPLITAMOUNTS].[REVENUESPLITAMOUNTINCURRENCY]), 0)
from dbo.[INSTALLMENTSPLITPAYMENT]
inner join dbo.[FINANCIALTRANSACTIONLINEITEM] on [FINANCIALTRANSACTIONLINEITEM].[ID] = [INSTALLMENTSPLITPAYMENT].[PAYMENTID]
inner join dbo.[REVENUE_EXT] on [REVENUE_EXT].[ID] = [FINANCIALTRANSACTIONLINEITEM].[FINANCIALTRANSACTIONID]
inner join @APPEALS as [APPEALS] on [APPEALS].[ID] = [REVENUE_EXT].[APPEALID]
inner join dbo.[UFN_APPEALREVENUESPLIT_GETAMOUNTSINCURRENCY_BULK](@SELECTEDCURRENCYID, @ORGANIZATIONCURRENCYID, @DECIMALDIGITS, @ROUNDINGTYPECODE, @CURRENCYCODE) as [REVENUESPLITAMOUNTS] on [REVENUESPLITAMOUNTS].[REVENUESPLITID] = [INSTALLMENTSPLITPAYMENT].[PAYMENTID]
where
(@STARTDATE is null or [REVENUESPLITAMOUNTS].[DATE] >= @STARTDATE)
and (@ENDDATE is null or [REVENUESPLITAMOUNTS].[DATE] <= @ENDDATE)
group by [REVENUE_EXT].[APPEALID], [REVENUE_EXT].[MAILINGID];
--Check if we are a SQL Server Enterprise server before creating the proper index...
if serverproperty('engineedition') = 3 --Enterprise
create nonclustered index [IX_APPEALPLEDGESPAID_APPEALID_MAILINGID] on #APPEALPLEDGESPAID ([APPEALID], [MAILINGID]) include ([PLEDGEPAIDAMOUNT]) with (DATA_COMPRESSION=PAGE);
else
create nonclustered index [IX_APPEALPLEDGESPAID_APPEALID_MAILINGID] on #APPEALPLEDGESPAID ([APPEALID], [MAILINGID]) include ([PLEDGEPAIDAMOUNT]);
if object_id('tempdb..#APPEALREVENUESPLIT') is not null
drop table #APPEALREVENUESPLIT;
create table #APPEALREVENUESPLIT (
[APPEALID] uniqueidentifier not null,
[REVENUEID] uniqueidentifier not null,
[CONSTITUENTID] uniqueidentifier not null,
[ISPLEDGE] bit not null,
[REVENUESPLITAMOUNTINCURRENCY] money,
[WRITEOFFSPLITAMOUNTINCURRENCY] money
);
--Revenue that matches the appeal and meets the date criteria
insert into #APPEALREVENUESPLIT ([APPEALID], [REVENUEID], [CONSTITUENTID], [ISPLEDGE], [REVENUESPLITAMOUNTINCURRENCY], [WRITEOFFSPLITAMOUNTINCURRENCY])
select
[APPEALS].[ID] as [APPEALID],
[REVENUESPLITAMOUNTS].[REVENUEID],
[FINANCIALTRANSACTION].[CONSTITUENTID],
(case when [TRANSACTIONTYPECODE] in (1,3,4,8) then 1 else 0 end) as [ISPLEDGE],
[REVENUESPLITAMOUNTS].[REVENUESPLITAMOUNTINCURRENCY],
[REVENUESPLITAMOUNTS].[WRITEOFFSPLITAMOUNTINCURRENCY]
from @APPEALS as [APPEALS]
inner join dbo.[REVENUE_EXT] on [REVENUE_EXT].[APPEALID] = [APPEALS].[ID]
inner join dbo.[FINANCIALTRANSACTION] on [FINANCIALTRANSACTION].[ID] = [REVENUE_EXT].[ID]
inner join dbo.[FINANCIALTRANSACTIONLINEITEM] on [FINANCIALTRANSACTIONLINEITEM].[FINANCIALTRANSACTIONID] = [FINANCIALTRANSACTION].[ID]
inner join dbo.[REVENUESPLIT_EXT] on [REVENUESPLIT_EXT].[ID] = [FINANCIALTRANSACTIONLINEITEM].[ID]
inner join dbo.[UFN_APPEALREVENUESPLIT_GETAMOUNTSINCURRENCY_BULK](@SELECTEDCURRENCYID, @ORGANIZATIONCURRENCYID, @DECIMALDIGITS, @ROUNDINGTYPECODE, @CURRENCYCODE) as [REVENUESPLITAMOUNTS] on [REVENUESPLITAMOUNTS].[REVENUESPLITID] = [REVENUESPLIT_EXT].[ID]
where (
--Revenue (excluding pledge payments)
([FINANCIALTRANSACTION].[TYPECODE] = 0 and [REVENUESPLIT_EXT].[APPLICATIONCODE] not in (2,3))
or
--Pledges
[FINANCIALTRANSACTION].[TYPECODE] in (1,3,4,8)
)
and (@STARTDATE is null or [FINANCIALTRANSACTION].[DATE] >= @STARTDATE)
and (@ENDDATE is null or [FINANCIALTRANSACTION].[DATE] <= @ENDDATE);
with [APPEALREVENUE_CTE] ([APPEALID], [REVENUEID], [CONSTITUENTID], [RECEIVEDAMOUNT], [PLEDGEDAMOUNT], [PLEDGEWRITEOFFAMOUNT]) as
(
select
[APPEALID],
[REVENUEID],
[CONSTITUENTID],
(case when [ISPLEDGE] = 1 then 0 else isnull(sum([REVENUESPLITAMOUNTINCURRENCY]), 0) end) as [RECEIVEDAMOUNT],
(case when [ISPLEDGE] = 1 then isnull(sum([REVENUESPLITAMOUNTINCURRENCY]), 0) else 0 end) as [PLEDGEDAMOUNT],
(case when [ISPLEDGE] = 1 then isnull(sum([WRITEOFFSPLITAMOUNTINCURRENCY]), 0) else 0 end) as [PLEDGEWRITEOFFAMOUNT]
from #APPEALREVENUESPLIT as [ARS]
group by [APPEALID], [REVENUEID], [CONSTITUENTID], [ISPLEDGE]
),
[APPEALMAILINGREVENUE_CTE] ([APPEALID], [MAILINGID], [REVENUEID], [CONSTITUENTID], [RECEIVEDAMOUNT], [PLEDGEDAMOUNT], [PLEDGEWRITEOFFAMOUNT]) as
(
--Segment revenue: Matches to a segment within a mailing
select
[APPEALREVENUE_CTE].[APPEALID],
[MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID],
[APPEALREVENUE_CTE].[REVENUEID],
[APPEALREVENUE_CTE].[CONSTITUENTID],
[APPEALREVENUE_CTE].[RECEIVEDAMOUNT],
[APPEALREVENUE_CTE].[PLEDGEDAMOUNT],
[APPEALREVENUE_CTE].[PLEDGEWRITEOFFAMOUNT]
from [APPEALREVENUE_CTE]
inner join dbo.[REVENUESEGMENT] on [REVENUESEGMENT].[REVENUEID] = [APPEALREVENUE_CTE].[REVENUEID]
inner join dbo.[MKTSEGMENTATIONSEGMENT] on [MKTSEGMENTATIONSEGMENT].[ID] = [REVENUESEGMENT].[SEGMENTID]
union all
--Indirect revenue: Matches to the mailing only (no segment)
select
[APPEALREVENUE_CTE].[APPEALID],
[REVENUE_EXT].[MAILINGID],
[APPEALREVENUE_CTE].[REVENUEID],
[APPEALREVENUE_CTE].[CONSTITUENTID],
[APPEALREVENUE_CTE].[RECEIVEDAMOUNT],
[APPEALREVENUE_CTE].[PLEDGEDAMOUNT],
[APPEALREVENUE_CTE].[PLEDGEWRITEOFFAMOUNT]
from [APPEALREVENUE_CTE]
inner join dbo.[REVENUE_EXT] on [REVENUE_EXT].[ID] = [APPEALREVENUE_CTE].[REVENUEID]
where not exists(select * from dbo.[REVENUESEGMENT] where [REVENUEID] = [APPEALREVENUE_CTE].[REVENUEID])
and [REVENUE_EXT].[MAILINGID] is not null
),
[MAILINGREVENUE_CTE] ([APPEALID], [MAILINGID], [TOTALRECEIVED], [TOTALPLEDGED], [TOTALPLEDGESPAID], [TOTALPLEDGESWRITTENOFF], [NUMBEROFDONORS], [NUMBEROFGIFTS]) as
(
--Revenue totals for revenue that matches to a mailing
select
[APPEALS].[ID] as [APPEALID],
[MKTSEGMENTATION].[ID] as [MAILINGID],
isnull(sum([APPEALMAILINGREVENUE_CTE].[RECEIVEDAMOUNT]), 0) as [TOTALRECEIVED],
isnull(sum([APPEALMAILINGREVENUE_CTE].[PLEDGEDAMOUNT]), 0) as [TOTALPLEDGED],
(case when isnull(sum([APPEALMAILINGREVENUE_CTE].[PLEDGEDAMOUNT]), 0) > 0
--Don't need the sum() here because it is already grouped in the temp table...
then isnull((select [PLEDGEPAIDAMOUNT] from #APPEALPLEDGESPAID where [APPEALID] = [APPEALS].[ID] and [MAILINGID] = [MKTSEGMENTATION].[ID]), 0)
else 0
end) as [TOTALPLEDGESPAID],
isnull(sum([APPEALMAILINGREVENUE_CTE].[PLEDGEWRITEOFFAMOUNT]), 0) as [TOTALPLEDGESWRITTENOFF],
count(distinct [APPEALMAILINGREVENUE_CTE].[CONSTITUENTID]) as [NUMBEROFDONORS],
count([APPEALMAILINGREVENUE_CTE].[REVENUEID]) as [NUMBEROFGIFTS]
from @APPEALS as [APPEALS]
inner join dbo.[MKTSEGMENTATIONACTIVATE] on [MKTSEGMENTATIONACTIVATE].[APPEALSYSTEMID] = cast([APPEALS].[ID] as nvarchar(36)) and [MKTSEGMENTATIONACTIVATE].[RECORDSOURCEID] = 'DFB4B8C1-5E9A-4C14-ACE3-01C096B53BA0'
inner join dbo.[MKTSEGMENTATION] on [MKTSEGMENTATION].[ID] = [MKTSEGMENTATIONACTIVATE].[SEGMENTATIONID] and [MKTSEGMENTATION].[ACTIVE] = 1 /*Activated mailings only*/
left join [APPEALMAILINGREVENUE_CTE] on [APPEALMAILINGREVENUE_CTE].[APPEALID] = [APPEALS].[ID] and [APPEALMAILINGREVENUE_CTE].[MAILINGID] = [MKTSEGMENTATION].[ID]
group by [APPEALS].[ID], [MKTSEGMENTATION].[ID]
),
[NONMAILINGREVENUE_CTE] ([APPEALID], [TOTALRECEIVED], [TOTALPLEDGED], [TOTALPLEDGESPAID], [TOTALPLEDGESWRITTENOFF], [NUMBEROFDONORS], [NUMBEROFGIFTS]) as
(
--Revenue totals for revenue that does NOT match to any mailing
select
[APPEALS].[ID],
isnull(sum([APPEALREVENUE_CTE].[RECEIVEDAMOUNT]), 0) as [TOTALRECEIVED],
isnull(sum([APPEALREVENUE_CTE].[PLEDGEDAMOUNT]), 0) as [TOTALPLEDGED],
(case when isnull(sum([APPEALREVENUE_CTE].[PLEDGEDAMOUNT]), 0) > 0
then isnull((select sum([PLEDGEPAIDAMOUNT]) from #APPEALPLEDGESPAID where [APPEALID] = [APPEALS].[ID] and [MAILINGID] is null), 0)
else 0
end) as [TOTALPLEDGESPAID],
isnull(sum([APPEALREVENUE_CTE].[PLEDGEWRITEOFFAMOUNT]), 0) as [TOTALPLEDGESWRITTENOFF],
count(distinct [APPEALREVENUE_CTE].[CONSTITUENTID]) as [NUMBEROFDONORS],
count([APPEALREVENUE_CTE].[REVENUEID]) as [NUMBEROFGIFTS]
from @APPEALS as [APPEALS]
left join [APPEALREVENUE_CTE] on [APPEALREVENUE_CTE].[APPEALID] = [APPEALS].[ID]
left join dbo.[REVENUE_EXT] on [REVENUE_EXT].[ID] = [APPEALREVENUE_CTE].[REVENUEID]
where [REVENUE_EXT].[MAILINGID] is null
and not exists(select * from dbo.[REVENUESEGMENT] where [REVENUEID] = [APPEALREVENUE_CTE].[REVENUEID])
group by [APPEALS].[ID]
),
[APPEALTOTALS] ([APPEALID], [NUMBEROFDONORS]) as
(
select
[APPEALID],
count(distinct [CONSTITUENTID]) as [NUMBEROFDONORS]
from [APPEALREVENUE_CTE]
group by [APPEALID]
)
--Revenue that matches to a mailing
select
[MAILINGREVENUE_CTE].[APPEALID],
[APPEALS].[NAME] as [APPEALNAME],
[MKTSEGMENTATION].[NAME] as [MAILINGNAME],
[APPEALS].[GOAL],
([MAILINGREVENUE_CTE].[TOTALRECEIVED] + [MAILINGREVENUE_CTE].[TOTALPLEDGED] - [MAILINGREVENUE_CTE].[TOTALPLEDGESWRITTENOFF]) as [TOTALRAISED],
([MAILINGREVENUE_CTE].[TOTALRECEIVED] + [MAILINGREVENUE_CTE].[TOTALPLEDGESPAID]) as [TOTALRECEIVED],
isnull([MKTSEGMENTATIONACTIVE].[QUANTITY], 0) as [SOLICITED],
cast(isnull((case when [MKTSEGMENTATIONACTIVE].[QUANTITY] > 0 then cast([MAILINGREVENUE_CTE].[NUMBEROFGIFTS] as decimal(19,4)) / cast([MKTSEGMENTATIONACTIVE].[QUANTITY] as decimal(19,4)) else 0 end), 0) as decimal(19,4)) as [RESPONSERATE],
[MAILINGREVENUE_CTE].[NUMBEROFDONORS],
[MAILINGREVENUE_CTE].[NUMBEROFGIFTS],
'http://www.blackbaud.com/APPEALID?APPEALID=' + convert(nvarchar(36), [MAILINGREVENUE_CTE].[APPEALID]) as [APPEALLINK],
'http://www.blackbaud.com/' + (case when [MKTSEGMENTATION].[MAILINGTYPECODE] = 4 then 'PUBLICMEDIAEFFORTID' else 'MAILINGID' end) + '?MAILINGID=' + convert(nvarchar(36), [MKTSEGMENTATION].[ID]) as [MAILINGLINK],
cast((case when [APPEALMAILING].[ID] is not null then 1 else 0 end) as bit) as [ISAPPEALMAILING],
'http://www.blackbaud.com/APPEALMAILINGID?APPEALMAILINGID=' + convert(nvarchar(36), [APPEALMAILING].[ID]) as [APPEALMAILINGLINK],
[APPEALS].[CURRENCYID],
[APPEALS].[CURRENCYISO],
[APPEALS].[CURRENCYDECIMALDIGITS],
[APPEALS].[CURRENCYSYMBOL],
[APPEALS].[CURRENCYSYMBOLDISPLAYSETTINGCODE],
[MKTSEGMENTATION].[ID] as [MAILINGID],
isnull([MAILINGAMOUNTS].[TOTALCOSTINCURRENCY], 0) as [TOTALCOST],
([MAILINGREVENUE_CTE].[TOTALRECEIVED] + [MAILINGREVENUE_CTE].[TOTALPLEDGED] - [MAILINGREVENUE_CTE].[TOTALPLEDGESWRITTENOFF] - isnull([MAILINGAMOUNTS].[TOTALCOSTINCURRENCY], 0)) as [TOTALPROFIT],
(case when isnull([MAILINGAMOUNTS].[TOTALCOSTINCURRENCY], 0) <> 0
then cast((([MAILINGREVENUE_CTE].[TOTALRECEIVED] + [MAILINGREVENUE_CTE].[TOTALPLEDGED] - [MAILINGREVENUE_CTE].[TOTALPLEDGESWRITTENOFF] - [MAILINGAMOUNTS].[TOTALCOSTINCURRENCY]) / [MAILINGAMOUNTS].[TOTALCOSTINCURRENCY]) as money)
else cast(0 as money)
end) as [ROI],
(case when ([MAILINGREVENUE_CTE].[TOTALRECEIVED] + [MAILINGREVENUE_CTE].[TOTALPLEDGED] - [MAILINGREVENUE_CTE].[TOTALPLEDGESWRITTENOFF]) <> 0
then cast((isnull([MAILINGAMOUNTS].[TOTALCOSTINCURRENCY], 0) / ([MAILINGREVENUE_CTE].[TOTALRECEIVED] + [MAILINGREVENUE_CTE].[TOTALPLEDGED] - [MAILINGREVENUE_CTE].[TOTALPLEDGESWRITTENOFF])) as money)
else cast((case when isnull([MAILINGAMOUNTS].[TOTALCOSTINCURRENCY], 0) = 0 then 0 else 1 end) as money)
end) as [COSTPERDOLLARRAISED],
[APPEALTOTALS].[NUMBEROFDONORS] as [APPEALTOTALDONORS]
from [MAILINGREVENUE_CTE]
left join dbo.[MKTSEGMENTATION] on [MKTSEGMENTATION].[ID] = [MAILINGREVENUE_CTE].[MAILINGID]
left join dbo.[UFN_MKTSEGMENTATION_GETAMOUNTSINCURRENCY_BULK](@SELECTEDCURRENCYID, @ORGANIZATIONCURRENCYID, @DECIMALDIGITS, @ROUNDINGTYPECODE) as [MAILINGAMOUNTS] on [MAILINGAMOUNTS].[ID] = [MKTSEGMENTATION].[ID]
left join @APPEALS as [APPEALS] on [APPEALS].[ID] = [MAILINGREVENUE_CTE].[APPEALID]
left join dbo.[APPEALMAILING] on [APPEALMAILING].[ID] = [MKTSEGMENTATION].[ID]
left join dbo.[MKTSEGMENTATIONACTIVE] on [MKTSEGMENTATIONACTIVE].[ID] = [MKTSEGMENTATION].[ID]
left join [APPEALTOTALS] on [APPEALTOTALS].[APPEALID] = [MAILINGREVENUE_CTE].[APPEALID]
union all
--Revenue that does NOT match to any mailing
select
[NONMAILINGREVENUE_CTE].[APPEALID],
[APPEALS].[NAME] as [APPEALNAME],
'(No mailing)' as [MAILINGNAME],
[APPEALS].[GOAL],
([NONMAILINGREVENUE_CTE].[TOTALRECEIVED] + [NONMAILINGREVENUE_CTE].[TOTALPLEDGED] - [NONMAILINGREVENUE_CTE].[TOTALPLEDGESWRITTENOFF]) as [TOTALRAISED],
([NONMAILINGREVENUE_CTE].[TOTALRECEIVED] + [NONMAILINGREVENUE_CTE].[TOTALPLEDGESPAID]) as [TOTALRECEIVED],
0 as [SOLICITED],
0 as [RESPONSERATE],
[NONMAILINGREVENUE_CTE].[NUMBEROFDONORS],
[NONMAILINGREVENUE_CTE].[NUMBEROFGIFTS],
'http://www.blackbaud.com/APPEALID?APPEALID=' + convert(nvarchar(36), [NONMAILINGREVENUE_CTE].[APPEALID]) as [APPEALLINK],
null as [MAILINGLINK],
cast(0 as bit) as [ISAPPEALMAILING],
null as [APPEALMAILINGLINK],
[APPEALS].[CURRENCYID],
[APPEALS].[CURRENCYISO],
[APPEALS].[CURRENCYDECIMALDIGITS],
[APPEALS].[CURRENCYSYMBOL],
[APPEALS].[CURRENCYSYMBOLDISPLAYSETTINGCODE],
null as [MAILINGID],
0 as [TOTALCOST],
([NONMAILINGREVENUE_CTE].[TOTALRECEIVED] + [NONMAILINGREVENUE_CTE].[TOTALPLEDGED] - [NONMAILINGREVENUE_CTE].[TOTALPLEDGESWRITTENOFF]) as [TOTALPROFIT],
0 as [ROI],
0 as [COSTPERDOLLARRAISED],
[APPEALTOTALS].[NUMBEROFDONORS] as [APPEALTOTALDONORS]
from [NONMAILINGREVENUE_CTE]
left join @APPEALS as [APPEALS] on [APPEALS].[ID] = [NONMAILINGREVENUE_CTE].[APPEALID]
left join [APPEALTOTALS] on [APPEALTOTALS].[APPEALID] = [NONMAILINGREVENUE_CTE].[APPEALID]
order by [APPEALNAME], [MAILINGNAME];
drop table #APPEALREVENUESPLIT;
drop table #APPEALPLEDGESPAID;