UFN_MKTSOURCECODE_BUILDCODESFORSEGMENTATION
Builds the full source code for all segments in the given segmentation.
Return
Return Type |
---|
table |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@SEGMENTATIONID | uniqueidentifier | IN | |
@SOURCECODEITEMID | uniqueidentifier | IN | |
@SEGMENTTYPECODE | tinyint | IN |
Definition
Copy
CREATE function dbo.[UFN_MKTSOURCECODE_BUILDCODESFORSEGMENTATION]
(
@SEGMENTATIONID uniqueidentifier,
@SOURCECODEITEMID uniqueidentifier,
@SEGMENTTYPECODE tinyint -- 0 = segment, 1 = test segment, 2 = both
)
returns @SOURCECODE table
(
[SEGMENTATIONSEGMENTID] uniqueidentifier,
[SOURCECODE] nvarchar(50)
)
as
begin
declare @ACTIVE bit;
declare @SOURCECODEID uniqueidentifier;
declare @SOURCECODEISHISTORICAL bit;
-- get general segmentation information
select
@ACTIVE = [ACTIVE],
@SOURCECODEID = [SOURCECODEID],
@SOURCECODEISHISTORICAL = isnull([MKTSOURCECODE].[ISHISTORICAL], 0)
from dbo.[MKTSEGMENTATION]
left outer join dbo.[MKTSOURCECODE] on [MKTSOURCECODE].[ID] = [MKTSEGMENTATION].[SOURCECODEID]
where [MKTSEGMENTATION].[ID] = @SEGMENTATIONID
-- if there isn't a source code, don't do anything else
if @SOURCECODEID is not null
if @SOURCECODEISHISTORICAL = 0
begin
-- get the number of parts in the given source code
declare @MAXSEQUENCE tinyint;
select @MAXSEQUENCE = max(sequence)
from MKTSOURCECODEITEM
where SOURCECODEID = @SOURCECODEID;
-- this table will hold information needed for list part types, which is defined on the segment
declare @SEGMENTLISTCODE table
(
[SEGMENTID] uniqueidentifier,
[ISCONSOLIDATEDVIEWSEGMENT] bit,
[LISTCODE] nvarchar(10),
[LISTPARTDEFINITIONVALUESID] uniqueidentifier
);
if @ACTIVE = 0
-- get the list code from the record source, list, or consolidated list
insert into @SEGMENTLISTCODE
(
[SEGMENTID],
[ISCONSOLIDATEDVIEWSEGMENT],
[LISTCODE],
[LISTPARTDEFINITIONVALUESID]
)
select distinct
[MKTSEGMENTATIONSEGMENT].[ID],
dbo.[UFN_MKTSEGMENT_ISCONSOLIDATEDVIEWSEGMENT]([MKTSEGMENT].[ID]),
case when exists (select [MKTCONSOLIDATEDQUERYVIEWSPEC].[CONSOLIDATEDQUERYVIEWCATALOGID]
from dbo.[MKTCONSOLIDATEDQUERYVIEWSPEC]
inner join dbo.[QUERYVIEWCATALOG] on [MKTCONSOLIDATEDQUERYVIEWSPEC].[CONSOLIDATEDQUERYVIEWCATALOGID] = [QUERYVIEWCATALOG].[ID]
where [QUERYVIEWCATALOG].[RECORDTYPEID] = [RECORDTYPE].[ID])
then ''
else isnull([MKTLIST].[CODE], (select [MKTRECORDSOURCE].[CODE]
from dbo.[MKTRECORDSOURCE]
where [MKTRECORDSOURCE].[ID] = [MKTSEGMENT].[QUERYVIEWCATALOGID]
and dbo.[UFN_MKTRECORDSOURCE_VALIDFORPRODUCT]([MKTRECORDSOURCE].[ID]) = 1))
end as [LISTCODE],
case when exists (select [MKTCONSOLIDATEDQUERYVIEWSPEC].[CONSOLIDATEDQUERYVIEWCATALOGID]
from dbo.[MKTCONSOLIDATEDQUERYVIEWSPEC]
inner join dbo.[QUERYVIEWCATALOG] on [MKTCONSOLIDATEDQUERYVIEWSPEC].[CONSOLIDATEDQUERYVIEWCATALOGID] = [QUERYVIEWCATALOG].[ID]
where [QUERYVIEWCATALOG].[RECORDTYPEID] = [RECORDTYPE].[ID])
then null
else isnull([MKTLIST].[PARTDEFINITIONVALUESID], (select [MKTRECORDSOURCE].[PARTDEFINITIONVALUESID]
from dbo.[MKTRECORDSOURCE]
where [MKTRECORDSOURCE].[ID] = [MKTSEGMENT].[QUERYVIEWCATALOGID]
and dbo.[UFN_MKTRECORDSOURCE_VALIDFORPRODUCT]([MKTRECORDSOURCE].[ID]) = 1))
end as [LISTPARTDEFINITIONVALUESID]
from dbo.[MKTSEGMENTATIONSEGMENT]
inner join dbo.[MKTSEGMENT] on [MKTSEGMENT].[ID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTID]
left join dbo.[MKTSEGMENTLIST] on [MKTSEGMENTLIST].[ID] = [MKTSEGMENT].[CURRENTSEGMENTLISTID]
left join dbo.[MKTLIST] on [MKTLIST].[ID] = [MKTSEGMENTLIST].[LISTID]
left join dbo.[IDSETREGISTER] on [MKTSEGMENT].[IDSETREGISTERID] = [IDSETREGISTER].[ID]
left join dbo.[RECORDTYPE] on [IDSETREGISTER].[RECORDTYPEID] = [RECORDTYPE].[ID]
where [MKTSEGMENTATIONSEGMENT].SEGMENTATIONID = @SEGMENTATIONID
option (RECOMPILE);
else
insert into @SEGMENTLISTCODE
(
[SEGMENTID],
[ISCONSOLIDATEDVIEWSEGMENT],
[LISTCODE],
[LISTPARTDEFINITIONVALUESID]
)
select
[MKTSEGMENTATIONSEGMENT].[ID],
dbo.[UFN_MKTSEGMENT_ISCONSOLIDATEDVIEWSEGMENT]([MKTSEGMENT].[ID]),
isnull([MKTSOURCECODEPART].[CODE], ''),
[MKTSOURCECODEPART].[PARTDEFINITIONVALUESID]
from dbo.[MKTSEGMENTATIONSEGMENT]
inner join dbo.[MKTSEGMENT] on [MKTSEGMENT].[ID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTID]
inner join dbo.[MKTRECORDSOURCE] on [MKTRECORDSOURCE].[ID] = [MKTSEGMENT].[QUERYVIEWCATALOGID]
left join dbo.[IDSETREGISTER] on [IDSETREGISTER].[ID] = [MKTSEGMENT].[IDSETREGISTERID]
left join dbo.[MKTSEGMENTLIST] on [MKTSEGMENTLIST].[ID] = [MKTSEGMENT].[CURRENTSEGMENTLISTID]
left join dbo.[MKTSOURCECODEPART] on [MKTSOURCECODEPART].[SEGMENTATIONID] = [MKTSEGMENTATIONSEGMENT].SEGMENTATIONID
and [MKTSOURCECODEPART].[LISTID] = isnull([MKTSEGMENTLIST].[LISTID], [MKTRECORDSOURCE].[ID])
where [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] = @SEGMENTATIONID
and dbo.[UFN_MKTRECORDSOURCE_VALIDFORPRODUCT]([MKTRECORDSOURCE].[ID]) = 1
option (RECOMPILE);
-- if we want source codes for regular segments, add them to the output table
if @SEGMENTTYPECODE = 0 or @SEGMENTTYPECODE = 2
insert into @SOURCECODE
(
[SEGMENTATIONSEGMENTID],
[SOURCECODE]
)
select
[MKTSEGMENTATIONSEGMENT].[ID],
dbo.[UFN_MKTSOURCECODE_BUILDCODEWITHSEGMENTINFO] (
[MKTSEGMENTATIONSEGMENT].[ID],
@SEGMENTATIONID,
@ACTIVE,
@SOURCECODEID,
@MAXSEQUENCE,
[LISTTABLE].[LISTCODE],
[LISTTABLE].[LISTPARTDEFINITIONVALUESID],
[LISTTABLE].[ISCONSOLIDATEDVIEWSEGMENT],
@SOURCECODEITEMID) as [SOURCECODE]
from dbo.[MKTSEGMENTATIONSEGMENT]
left join @SEGMENTLISTCODE as [LISTTABLE] on [LISTTABLE].[SEGMENTID] = [MKTSEGMENTATIONSEGMENT].[ID]
where [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] = @SEGMENTATIONID;
-- if we want source codes for test segment, add them to the output table
if @SEGMENTTYPECODE = 1 or @SEGMENTTYPECODE = 2
insert into @SOURCECODE
(
[SEGMENTATIONSEGMENTID],
[SOURCECODE]
)
select
[MKTSEGMENTATIONTESTSEGMENT].[ID],
dbo.[UFN_MKTSOURCECODE_BUILDCODEWITHSEGMENTINFO] (
[MKTSEGMENTATIONTESTSEGMENT].[ID],
@SEGMENTATIONID,
@ACTIVE,
@SOURCECODEID,
@MAXSEQUENCE,
[LISTTABLE].[LISTCODE],
[LISTTABLE].[LISTPARTDEFINITIONVALUESID],
[LISTTABLE].[ISCONSOLIDATEDVIEWSEGMENT],
@SOURCECODEITEMID)
from dbo.[MKTSEGMENTATIONTESTSEGMENT]
inner join dbo.[MKTSEGMENTATIONSEGMENT] on [MKTSEGMENTATIONSEGMENT].[ID] = [MKTSEGMENTATIONTESTSEGMENT].[SEGMENTID]
left join @SEGMENTLISTCODE as [LISTTABLE] on [LISTTABLE].[SEGMENTID] = [MKTSEGMENTATIONSEGMENT].[ID]
where [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] = @SEGMENTATIONID;
end
else -- @SOURCECODEISHISTORICAL = 1
begin
if @SEGMENTTYPECODE = 0 or @SEGMENTTYPECODE = 2
insert into @SOURCECODE
(
[SEGMENTATIONSEGMENTID],
[SOURCECODE]
)
select
[MKTSEGMENTATIONSEGMENT].[ID],
[MKTSOURCECODEMAP].[SOURCECODE]
from dbo.[MKTSEGMENTATIONSEGMENT]
inner join dbo.[MKTSOURCECODEMAP] on [MKTSOURCECODEMAP].[SEGMENTATIONID] = @SEGMENTATIONID
and [MKTSOURCECODEMAP].[SEGMENTATIONSEGMENTID] = [MKTSEGMENTATIONSEGMENT].[ID]
and [MKTSOURCECODEMAP].[SEGMENTATIONTESTSEGMENTID] is null
where [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] = @SEGMENTATIONID;
-- if we want source codes for test segment, add them to the output table
if @SEGMENTTYPECODE = 1 or @SEGMENTTYPECODE = 2
insert into @SOURCECODE
(
[SEGMENTATIONSEGMENTID],
[SOURCECODE]
)
select
[MKTSEGMENTATIONTESTSEGMENT].[ID],
[MKTSOURCECODEMAP].[SOURCECODE]
from dbo.[MKTSEGMENTATIONTESTSEGMENT]
inner join dbo.[MKTSEGMENTATIONSEGMENT] on [MKTSEGMENTATIONSEGMENT].[ID] = [MKTSEGMENTATIONTESTSEGMENT].[SEGMENTID]
inner join dbo.[MKTSOURCECODEMAP] on [MKTSOURCECODEMAP].[SEGMENTATIONID] = @SEGMENTATIONID
and [MKTSOURCECODEMAP].[SEGMENTATIONSEGMENTID] = [MKTSEGMENTATIONSEGMENT].[ID]
and [MKTSOURCECODEMAP].[SEGMENTATIONTESTSEGMENTID] = [MKTSEGMENTATIONTESTSEGMENT].[ID]
where [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] = @SEGMENTATIONID;
end
return;
end