USP_MKTSEGMENTATION_GETPACKAGEOFFERCOUNTSFORSEGMENTATION
Returns the offer count for all packages in the given marketing effort.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@SEGMENTATIONID | uniqueidentifier | IN |
Definition
Copy
CREATE procedure dbo.[USP_MKTSEGMENTATION_GETPACKAGEOFFERCOUNTSFORSEGMENTATION]
(
@SEGMENTATIONID uniqueidentifier
)
as
set nocount on;
declare @MAILINGTYPECODE tinyint;
declare @ACTIVE bit;
declare @DATATABLE nvarchar(128);
declare @SQL nvarchar(max);
declare @SEGMENTID uniqueidentifier;
declare @TESTSEGMENTID uniqueidentifier;
declare @PACKAGEID uniqueidentifier;
declare @HISTORICALQUANTITY int;
begin try
create table #PACKAGETOTALOFFER (
[PACKAGEID] uniqueidentifier primary key,
[TOTALOFFERS] int
);
insert into #PACKAGETOTALOFFER ([PACKAGEID], [TOTALOFFERS])
select [PACKAGEID], 0
from dbo.[MKTSEGMENTATIONPACKAGE]
where [MKTSEGMENTATIONPACKAGE].[SEGMENTATIONID] = @SEGMENTATIONID;
select
@MAILINGTYPECODE = [MAILINGTYPECODE],
@ACTIVE = [ACTIVE],
@DATATABLE = dbo.[UFN_MKTSEGMENTATIONACTIVATE_MAKETABLENAME]([ID])
from dbo.[MKTSEGMENTATION]
where [ID] = @SEGMENTATIONID;
if @MAILINGTYPECODE <> 4
begin
--Get the total offer count for the mailing data table (if exists)...
if exists(select * from INFORMATION_SCHEMA.TABLES where [TABLE_SCHEMA] = 'dbo' and [TABLE_NAME] = @DATATABLE)
begin
set @SQL = 'update #PACKAGETOTALOFFER set' + char(13) +
' [TOTALOFFERS] = [PACKAGEOFFER].[OFFERS]' + char(13) +
'from #PACKAGETOTALOFFER as [PACKAGETOTALOFFER]' + char(13) +
'inner join (' + char(13) +
' select' + char(13) +
' isnull([MKTSEGMENTATIONTESTSEGMENT].[PACKAGEID], [MKTSEGMENTATIONSEGMENT].[PACKAGEID]) as [PACKAGEID],' + char(13) +
' count([DONORS].[DONORID]) as [OFFERS]' + char(13) +
' from dbo.[' + @DATATABLE + '] as [DONORS]' + char(13) +
' inner join dbo.[MKTSEGMENTATIONSEGMENT] on [MKTSEGMENTATIONSEGMENT].[ID] = [DONORS].[SEGMENTID]' + char(13) +
' inner join dbo.[MKTSEGMENT] on [MKTSEGMENT].[ID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTID]' + char(13) +
' left join dbo.[MKTSEGMENTATIONSEGMENTLIST] on [MKTSEGMENTATIONSEGMENTLIST].[ID] = [MKTSEGMENTATIONSEGMENT].[ID]' + char(13) +
' left join dbo.[MKTSEGMENTLIST] on [MKTSEGMENTLIST].[ID] = ' + (case when @ACTIVE = 1 then '[MKTSEGMENTATIONSEGMENTLIST].[SEGMENTLISTID]' else '[MKTSEGMENT].[CURRENTSEGMENTLISTID]' end) + char(13) +
' left join dbo.[MKTSEGMENTATIONTESTSEGMENT] on [MKTSEGMENTATIONTESTSEGMENT].[ID] = [DONORS].[TESTSEGMENTID]' + char(13) +
' where ([MKTSEGMENT].[SEGMENTTYPECODE] <> 2 or [MKTSEGMENTLIST].[TYPECODE] = 0)' + char(13) +
' and [MKTSEGMENT].[ISHISTORICAL] = 0' + char(13) +
' and [DONORS].[DONORQUERYVIEWCATALOGID] is not null' + char(13) +
' group by isnull([MKTSEGMENTATIONTESTSEGMENT].[PACKAGEID], [MKTSEGMENTATIONSEGMENT].[PACKAGEID])' + char(13) +
') as [PACKAGEOFFER] on [PACKAGEOFFER].[PACKAGEID] = [PACKAGETOTALOFFER].[PACKAGEID]';
exec sp_executesql @SQL;
end
--Add in the seeds...
update #PACKAGETOTALOFFER set
[TOTALOFFERS] += [SEED].[NUMSEEDS]
from (
select count([ID]) as [NUMSEEDS]
from dbo.[MKTSEGMENTATIONSEED]
where [SEGMENTATIONID] = @SEGMENTATIONID
) as [SEED];
--Get the total offer count for any vendor managed segments and add their offers to the total offer count...
declare VENDORMANAGEDSEGMENTCURSOR cursor local fast_forward for
--Vendor managed list segments
select
[MKTSEGMENTATIONSEGMENT].[ID],
null,
[MKTSEGMENTATIONSEGMENT].[PACKAGEID]
from dbo.[MKTSEGMENTATION]
inner join dbo.[MKTSEGMENTATIONSEGMENT] on [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] = [MKTSEGMENTATION].[ID]
left join dbo.[MKTSEGMENTATIONSEGMENTLIST] on [MKTSEGMENTATIONSEGMENTLIST].[ID] = [MKTSEGMENTATIONSEGMENT].[ID]
inner join dbo.[MKTSEGMENT] on [MKTSEGMENT].[ID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTID]
inner join dbo.[MKTSEGMENTLIST] on [MKTSEGMENTLIST].[ID] = (case when @ACTIVE = 1 then [MKTSEGMENTATIONSEGMENTLIST].[SEGMENTLISTID] else [MKTSEGMENT].[CURRENTSEGMENTLISTID] end)
where [MKTSEGMENTLIST].[TYPECODE] = 1
and [MKTSEGMENTATION].[ID] = @SEGMENTATIONID
union
--Vendor managed list test segments
select
[MKTSEGMENTATIONSEGMENT].[ID],
[MKTSEGMENTATIONTESTSEGMENT].[ID],
[MKTSEGMENTATIONTESTSEGMENT].[PACKAGEID]
from dbo.[MKTSEGMENTATION]
inner join dbo.[MKTSEGMENTATIONSEGMENT] on [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] = [MKTSEGMENTATION].[ID]
inner join dbo.[MKTSEGMENTATIONTESTSEGMENT] on [MKTSEGMENTATIONTESTSEGMENT].[SEGMENTID] = [MKTSEGMENTATIONSEGMENT].[ID]
left join dbo.[MKTSEGMENTATIONSEGMENTLIST] on [MKTSEGMENTATIONSEGMENTLIST].[ID] = [MKTSEGMENTATIONSEGMENT].[ID]
inner join dbo.[MKTSEGMENT] on [MKTSEGMENT].[ID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTID]
inner join dbo.[MKTSEGMENTLIST] on [MKTSEGMENTLIST].[ID] = (case when @ACTIVE = 1 then [MKTSEGMENTATIONSEGMENTLIST].[SEGMENTLISTID] else [MKTSEGMENT].[CURRENTSEGMENTLISTID] end)
where [MKTSEGMENTLIST].[TYPECODE] = 1
and [MKTSEGMENTATION].[ID] = @SEGMENTATIONID;
open VENDORMANAGEDSEGMENTCURSOR;
fetch next from VENDORMANAGEDSEGMENTCURSOR into @SEGMENTID, @TESTSEGMENTID, @PACKAGEID;
while (@@FETCH_STATUS = 0)
begin
update #PACKAGETOTALOFFER set
[TOTALOFFERS] += dbo.[UFN_MKTSEGMENTATIONSEGMENTLIST_GETVENDORMANAGEDQUANTITY](@SEGMENTID, @TESTSEGMENTID)
where [PACKAGEID] = @PACKAGEID;
fetch next from VENDORMANAGEDSEGMENTCURSOR into @SEGMENTID, @TESTSEGMENTID, @PACKAGEID;
end
close VENDORMANAGEDSEGMENTCURSOR;
deallocate VENDORMANAGEDSEGMENTCURSOR;
--Get the total offer count for any historical segments (non-lists) and add their offers to the total offer count...
declare HISTORICALSEGMENTCURSOR cursor local fast_forward for
--Historical segments
select
[MKTSEGMENTATIONSEGMENT].[ID],
null,
(case when [MKTSEGMENTATIONSEGMENT].[HISTORICALQUANTITY] > 0 then [MKTSEGMENTATIONSEGMENT].[HISTORICALQUANTITY] else [MKTSEGMENT].[HISTORICALQUANTITY] end),
[MKTSEGMENTATIONSEGMENT].[PACKAGEID]
from dbo.[MKTSEGMENTATION]
inner join dbo.[MKTSEGMENTATIONSEGMENT] on [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] = [MKTSEGMENTATION].[ID]
inner join dbo.[MKTSEGMENT] on [MKTSEGMENT].[ID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTID]
where [MKTSEGMENT].[ISHISTORICAL] = 1
and [MKTSEGMENTATION].[ID] = @SEGMENTATIONID
union
--Historical test segments
select
[MKTSEGMENTATIONSEGMENT].[ID],
[MKTSEGMENTATIONTESTSEGMENT].[ID],
(case when [MKTSEGMENTATIONSEGMENT].[HISTORICALQUANTITY] > 0 then [MKTSEGMENTATIONSEGMENT].[HISTORICALQUANTITY] else [MKTSEGMENT].[HISTORICALQUANTITY] end),
[MKTSEGMENTATIONTESTSEGMENT].[PACKAGEID]
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]
where [MKTSEGMENT].[ISHISTORICAL] = 1
and [MKTSEGMENTATION].[ID] = @SEGMENTATIONID;
open HISTORICALSEGMENTCURSOR;
fetch next from HISTORICALSEGMENTCURSOR into @SEGMENTID, @TESTSEGMENTID, @HISTORICALQUANTITY, @PACKAGEID;
while (@@FETCH_STATUS = 0)
begin
update #PACKAGETOTALOFFER set
[TOTALOFFERS] += dbo.[UFN_MKTSEGMENTATIONSEGMENT_GETOFFERCOUNT](@SEGMENTID, @TESTSEGMENTID, @HISTORICALQUANTITY)
where [PACKAGEID] = @PACKAGEID;
fetch next from HISTORICALSEGMENTCURSOR into @SEGMENTID, @TESTSEGMENTID, @HISTORICALQUANTITY, @PACKAGEID;
end
close HISTORICALSEGMENTCURSOR;
deallocate HISTORICALSEGMENTCURSOR;
end
else
update #PACKAGETOTALOFFER set
[TOTALOFFERS] = dbo.[UFN_MKTSEGMENTATIONPASSIVEPACKAGE_GETQUANTITY](@SEGMENTATIONID, [PACKAGEID], @ACTIVE);
select
[PACKAGEID],
[TOTALOFFERS]
from #PACKAGETOTALOFFER;
drop table #PACKAGETOTALOFFER;
end try
begin catch
exec dbo.[USP_RAISE_ERROR];
if object_id('tempdb..#PACKAGETOTALOFFER') is not null
drop table #PACKAGETOTALOFFER;
return 1;
end catch
return 0;