USP_MKTSEGMENTATIONSEGMENTACTIVE_GETSEGMENTS

Returns a list of all segments and test segments in a marketing effort with the information needed to calculate response counts.

Parameters

Parameter Parameter Type Mode Description
@SEGMENTATIONID uniqueidentifier IN

Definition

Copy


CREATE procedure dbo.[USP_MKTSEGMENTATIONSEGMENTACTIVE_GETSEGMENTS]
(
  @SEGMENTATIONID uniqueidentifier
)
as
  set nocount on;

  declare @PACKAGEPERTHOUSANDAMOUNT decimal(15,5) = 1000.0;

  select
    [T].[SEGMENTID],
    [T].[TESTSEGMENTID],
    [T].[SEGMENTTYPECODE],
    [T].[IMPRESSIONS],
    convert(tinyint, [T].[IMPRESSIONCALCULATIONMETHODCODE]) as [IMPRESSIONCALCULATIONMETHODCODE],
    convert(decimal(19,4), [T].[COSTPERPIECE]) as [COSTPERPIECE],
    [T].[RESPONSERATE],
    [T].[COSTPERRESPONSE],
    [T].[FIXEDCOST],
    [T].[GIFTAMOUNT],
    convert(decimal(19,4), [T].[ORGANIZATIONCOSTPERPIECE]) as [ORGANIZATIONCOSTPERPIECE],
    [T].[ORGANIZATIONCOSTPERRESPONSE],
    [T].[ORGANIZATIONFIXEDCOST],
    [T].[ORGANIZATIONGIFTAMOUNT],
    [T].[EXCLUDE]
  from (
    select
      [MKTSEGMENTATIONSEGMENT].[ID] as [SEGMENTID],
      [MKTSEGMENTATIONSEGMENT].[EXCLUDE],
      null as [TESTSEGMENTID],
      [MKTSEGMENT].[SEGMENTTYPECODE],
      isnull([MKTSEGMENTPASSIVE].[IMPRESSIONS], 0) as [IMPRESSIONS],
      isnull([MKTSEGMENTPASSIVE].[IMPRESSIONCALCULATIONMETHODCODE], 0) as [IMPRESSIONCALCULATIONMETHODCODE],

      cast(case [MKTSEGMENTATIONSEGMENT].[EXCLUDE] when 1 then 0 else
             case [MKTSEGMENTATIONPACKAGE].[COSTDISTRIBUTIONMETHODCODE]
               when 0 then [MKTSEGMENTATIONPACKAGE].[UNITCOST]
               when 4 then [MKTSEGMENTATIONPACKAGE].[UNITCOST] / @PACKAGEPERTHOUSANDAMOUNT else 0 end +
             [MKTSEGMENTATIONPACKAGE].[INSERTCOSTPERPIECE] +
             case when [MKTSEGMENT].[SEGMENTTYPECODE] = 2 then dbo.[UFN_MKTSEGMENTATIONSEGMENTLIST_GETCOSTPERRECORD2]([MKTSEGMENTATIONSEGMENT].[ID], 0) else 0 end
      end as decimal(30,8)) as [COSTPERPIECE],

      [MKTSEGMENTATIONSEGMENT].[RESPONSERATE],

      case [MKTSEGMENTATIONSEGMENT].[EXCLUDE] when 1 then 0 else
        case [MKTSEGMENTATIONPACKAGE].[COSTDISTRIBUTIONMETHODCODE] when 1 then [MKTSEGMENTATIONPACKAGE].[UNITCOST] else 0 end +
        [MKTSEGMENTATIONPACKAGE].[INSERTCOSTPERRESPONSE]
      end as [COSTPERRESPONSE],

      case [MKTSEGMENTATIONSEGMENT].[EXCLUDE] when 1 then 0 else
        -- calculate this segment's share of the package's cost per effort, which is split evenly among all segments in the mailing

        -- using this package, and will be rolled up into the segment's fixed cost

        (case [MKTSEGMENTATIONPACKAGE].[COSTDISTRIBUTIONMETHODCODE] when 2 then [MKTSEGMENTATIONPACKAGE].[UNITCOST] else 0 end +
         [MKTSEGMENTATIONPACKAGE].[INSERTCOSTPEREFFORT])
        /
        ((select count([SS].[ID]) from dbo.[MKTSEGMENTATIONSEGMENT] as [SS] where [SS].[SEGMENTATIONID] = @SEGMENTATIONID and [SS].[PACKAGEID] = [MKTSEGMENTATIONSEGMENT].[PACKAGEID]) +
         isnull((select count([SS].[ID]) from dbo.[MKTSEGMENTATIONTESTSEGMENT] as [STS] inner join dbo.[MKTSEGMENTATIONSEGMENT] as [SS] on [SS].[ID] = [STS].[SEGMENTID] where [SS].[SEGMENTATIONID] = @SEGMENTATIONID and [STS].[PACKAGEID] = [MKTSEGMENTATIONSEGMENT].[PACKAGEID]), 0))
      end as [FIXEDCOST],

      [MKTSEGMENTATIONSEGMENT].[GIFTAMOUNT],
      [MKTSEGMENTATIONSEGMENT].[SEQUENCE] as [SEGSEQ],
      0 as [TESTSEQ],

      cast(case [MKTSEGMENTATIONSEGMENT].[EXCLUDE] when 1 then 0 else
             case [MKTSEGMENTATIONPACKAGE].[COSTDISTRIBUTIONMETHODCODE] 
               when 0 then [MKTSEGMENTATIONPACKAGE].[ORGANIZATIONUNITCOST]
               when 4 then [MKTSEGMENTATIONPACKAGE].[ORGANIZATIONUNITCOST]/@PACKAGEPERTHOUSANDAMOUNT else 0 end +
             [MKTSEGMENTATIONPACKAGE].[ORGANIZATIONINSERTCOSTPERPIECE] +
             case when [MKTSEGMENT].[SEGMENTTYPECODE] = 2 then dbo.[UFN_MKTSEGMENTATIONSEGMENTLIST_GETCOSTPERRECORD2]([MKTSEGMENTATIONSEGMENT].[ID], 1) else 0 end
      end as decimal(30,8)) as [ORGANIZATIONCOSTPERPIECE],

      case [MKTSEGMENTATIONSEGMENT].[EXCLUDE] when 1 then 0 else
        case [MKTSEGMENTATIONPACKAGE].[COSTDISTRIBUTIONMETHODCODE] when 1 then [MKTSEGMENTATIONPACKAGE].[ORGANIZATIONUNITCOST] else 0 end +
        [MKTSEGMENTATIONPACKAGE].[ORGANIZATIONINSERTCOSTPERRESPONSE]
      end as [ORGANIZATIONCOSTPERRESPONSE],

      case [MKTSEGMENTATIONSEGMENT].[EXCLUDE] when 1 then 0 else
        (case [MKTSEGMENTATIONPACKAGE].[COSTDISTRIBUTIONMETHODCODE] when 2 then [MKTSEGMENTATIONPACKAGE].[ORGANIZATIONUNITCOST] else 0 end +
         [MKTSEGMENTATIONPACKAGE].[ORGANIZATIONINSERTCOSTPEREFFORT])
        /
        ((select count([SS].[ID]) from dbo.[MKTSEGMENTATIONSEGMENT] as [SS] where [SS].[SEGMENTATIONID] = @SEGMENTATIONID and [SS].[PACKAGEID] = [MKTSEGMENTATIONSEGMENT].[PACKAGEID]) +
         isnull((select count([SS].[ID]) from dbo.[MKTSEGMENTATIONTESTSEGMENT] as [STS] inner join dbo.[MKTSEGMENTATIONSEGMENT] as [SS] on [SS].[ID] = [STS].[SEGMENTID] where [SS].[SEGMENTATIONID] = @SEGMENTATIONID and [STS].[PACKAGEID] = [MKTSEGMENTATIONSEGMENT].[PACKAGEID]), 0))
      end as [ORGANIZATIONFIXEDCOST],

      [MKTSEGMENTATIONSEGMENT].[ORGANIZATIONGIFTAMOUNT]
    from dbo.[MKTSEGMENTATIONSEGMENT]
    inner join dbo.[MKTSEGMENT] on [MKTSEGMENT].[ID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTID]
    left outer join dbo.[MKTSEGMENTPASSIVE] on [MKTSEGMENTPASSIVE].[ID] = [MKTSEGMENT].[ID]
    left outer join dbo.[MKTSEGMENTATIONPACKAGE] on ([MKTSEGMENTATIONSEGMENT].[EXCLUDE] = 0 and [MKTSEGMENTATIONPACKAGE].[SEGMENTATIONID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] and [MKTSEGMENTATIONPACKAGE].[PACKAGEID] = [MKTSEGMENTATIONSEGMENT].[PACKAGEID])
    where [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] = @SEGMENTATIONID

    union

    select
      [MKTSEGMENTATIONTESTSEGMENT].[SEGMENTID],
      [MKTSEGMENTATIONSEGMENT].[EXCLUDE],
      [MKTSEGMENTATIONTESTSEGMENT].[ID] as [TESTSEGMENTID],
      [MKTSEGMENT].[SEGMENTTYPECODE],
      0 as [IMPRESSIONS],
      0 as [IMPRESSIONCALCULATIONMETHODCODE],

      case [MKTSEGMENTATIONPACKAGE].[COSTDISTRIBUTIONMETHODCODE] 
        when 0 then [MKTSEGMENTATIONPACKAGE].[UNITCOST]
        when 4 then [MKTSEGMENTATIONPACKAGE].[UNITCOST]/@PACKAGEPERTHOUSANDAMOUNT else 0 end +
      [MKTSEGMENTATIONPACKAGE].[INSERTCOSTPERPIECE] +
      case when [MKTSEGMENT].[SEGMENTTYPECODE] = 2 then dbo.[UFN_MKTSEGMENTATIONSEGMENTLIST_GETCOSTPERRECORD2]([MKTSEGMENTATIONSEGMENT].[ID], 0) else 0 end
      as [COSTPERPIECE],

      [MKTSEGMENTATIONTESTSEGMENT].[RESPONSERATE],

      case [MKTSEGMENTATIONPACKAGE].[COSTDISTRIBUTIONMETHODCODE] when 1 then [MKTSEGMENTATIONPACKAGE].[UNITCOST] else 0 end +
      [MKTSEGMENTATIONPACKAGE].[INSERTCOSTPERRESPONSE]
      as [COSTPERRESPONSE],

      -- calculate this segment's share of the package's cost per effort, which is split evenly among all segments in the mailing

      -- using this package, and will be rolled up into the segment's fixed cost

      (case [MKTSEGMENTATIONPACKAGE].[COSTDISTRIBUTIONMETHODCODE] when 2 then [MKTSEGMENTATIONPACKAGE].[UNITCOST] else 0 end +
       [MKTSEGMENTATIONPACKAGE].[INSERTCOSTPEREFFORT])
      /
      ((select count([SS].[ID]) from dbo.[MKTSEGMENTATIONSEGMENT] as [SS] where [SS].[SEGMENTATIONID] = @SEGMENTATIONID and [SS].[PACKAGEID] = [MKTSEGMENTATIONSEGMENT].[PACKAGEID]) +
       isnull((select count([SS].[ID]) from dbo.[MKTSEGMENTATIONTESTSEGMENT] as [STS] inner join dbo.[MKTSEGMENTATIONSEGMENT] as [SS] on [SS].[ID] = [STS].[SEGMENTID] where [SS].[SEGMENTATIONID] = @SEGMENTATIONID and [STS].[PACKAGEID] = [MKTSEGMENTATIONSEGMENT].[PACKAGEID]), 0))
      as [FIXEDCOST],

      [MKTSEGMENTATIONTESTSEGMENT].[GIFTAMOUNT],
      [MKTSEGMENTATIONSEGMENT].[SEQUENCE] as [SEGSEQ],
      [MKTSEGMENTATIONTESTSEGMENT].[SEQUENCE] as [TESTSEQ],

      case [MKTSEGMENTATIONPACKAGE].[COSTDISTRIBUTIONMETHODCODE] 
        when 0 then [MKTSEGMENTATIONPACKAGE].[ORGANIZATIONUNITCOST]
        when 4 then [MKTSEGMENTATIONPACKAGE].[ORGANIZATIONUNITCOST]/@PACKAGEPERTHOUSANDAMOUNT else 0 end +
      [MKTSEGMENTATIONPACKAGE].[ORGANIZATIONINSERTCOSTPERPIECE] +
      case when [MKTSEGMENT].[SEGMENTTYPECODE] = 2 then dbo.[UFN_MKTSEGMENTATIONSEGMENTLIST_GETCOSTPERRECORD2]([MKTSEGMENTATIONSEGMENT].[ID], 1) else 0 end
      as [ORGANIZATIONCOSTPERPIECE],

      case [MKTSEGMENTATIONPACKAGE].[COSTDISTRIBUTIONMETHODCODE] when 1 then [MKTSEGMENTATIONPACKAGE].[ORGANIZATIONUNITCOST] else 0 end +
      [MKTSEGMENTATIONPACKAGE].[ORGANIZATIONINSERTCOSTPERRESPONSE]
      as [ORGANIZATIONCOSTPERRESPONSE],

      -- calculate this segment's share of the package's cost per effort, which is split evenly among all segments in the mailing

      -- using this package, and will be rolled up into the segment's fixed cost

      (case [MKTSEGMENTATIONPACKAGE].[COSTDISTRIBUTIONMETHODCODE] when 2 then [MKTSEGMENTATIONPACKAGE].[ORGANIZATIONUNITCOST] else 0 end +
       [MKTSEGMENTATIONPACKAGE].[ORGANIZATIONINSERTCOSTPEREFFORT])
      /
      ((select count([SS].[ID]) from dbo.[MKTSEGMENTATIONSEGMENT] as [SS] where [SS].[SEGMENTATIONID] = @SEGMENTATIONID and [SS].[PACKAGEID] = [MKTSEGMENTATIONSEGMENT].[PACKAGEID]) +
       isnull((select count([SS].[ID]) from dbo.[MKTSEGMENTATIONTESTSEGMENT] as [STS] inner join dbo.[MKTSEGMENTATIONSEGMENT] as [SS] on [SS].[ID] = [STS].[SEGMENTID] where [SS].[SEGMENTATIONID] = @SEGMENTATIONID and [STS].[PACKAGEID] = [MKTSEGMENTATIONSEGMENT].[PACKAGEID]), 0))
      as [ORGANIZATIONFIXEDCOST],

      [MKTSEGMENTATIONTESTSEGMENT].[ORGANIZATIONGIFTAMOUNT]
    from dbo.[MKTSEGMENTATIONTESTSEGMENT]
    inner join dbo.[MKTSEGMENTATIONSEGMENT] on [MKTSEGMENTATIONSEGMENT].[ID] = [MKTSEGMENTATIONTESTSEGMENT].[SEGMENTID]
    inner join dbo.[MKTSEGMENT] on [MKTSEGMENT].[ID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTID]
    inner join dbo.[MKTSEGMENTATIONPACKAGE] on [MKTSEGMENTATIONPACKAGE].[SEGMENTATIONID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] and [MKTSEGMENTATIONPACKAGE].[PACKAGEID] = [MKTSEGMENTATIONTESTSEGMENT].[PACKAGEID]
    where [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] = @SEGMENTATIONID
  ) as [T]
  order by [T].[SEGSEQ], [T].[TESTSEQ];

  return 0;