UFN_MKTSEGMENTATION_GETAMOUNTSINCURRENCY_BULK

Returns the amounts of all segmentation records in the given currency

Return

Return Type
table

Parameters

Parameter Parameter Type Mode Description
@CURRENCYID uniqueidentifier IN
@ORGANIZATIONCURRENCYID uniqueidentifier IN
@DECIMALDIGITS tinyint IN
@ROUNDINGTYPECODE tinyint IN

Definition

Copy


CREATE function dbo.UFN_MKTSEGMENTATION_GETAMOUNTSINCURRENCY_BULK
  (
    @CURRENCYID uniqueidentifier,
    @ORGANIZATIONCURRENCYID uniqueidentifier,
    @DECIMALDIGITS tinyint,
    @ROUNDINGTYPECODE tinyint
  )
  returns table
  as
  return
  (
    --CTE to calculate MKTSegmentationActive in currency

    with [MKTSEGMENTATION_CTE] 
    (
      [ID], 
      [ACTIVE], 
      [ACTIVATEDATE], 
      [MKTSEGMENTATIONACTIVEID], 
      [TOTALGIFTAMOUNTINCURRENCY], 
      [TOTALCOSTINCURRENCY],
      [QUANTITY],
      [RESPONSERATE],
      [RESPONDERS],
      [RESPONSES]
    )
      as
    (
      select 
        [MKTSEGMENTATION].[ID],
        [MKTSEGMENTATION].[ACTIVE],
        [MKTSEGMENTATION].[ACTIVATEDATE],
        [MKTSEGMENTATIONACTIVE].[ID] as [MKTSEGMENTATIONACTIVEID],
        case 
          when (@CURRENCYID is null) or (@CURRENCYID = @ORGANIZATIONCURRENCYID)
            then [MKTSEGMENTATIONACTIVE].[ORGANIZATIONTOTALGIFTAMOUNT]
          else [MKTSEGMENTATIONACTIVE].[TOTALGIFTAMOUNT]
        end [TOTALGIFTAMOUNTINCURRENCY],
        case 
          when (@CURRENCYID is null) or (@CURRENCYID = @ORGANIZATIONCURRENCYID)
            then [MKTSEGMENTATIONACTIVE].[ORGANIZATIONTOTALCOST]
          else [MKTSEGMENTATIONACTIVE].[TOTALCOST]
        end [TOTALCOSTINCURRENCY],
        [MKTSEGMENTATIONACTIVE].[QUANTITY],
        [MKTSEGMENTATIONACTIVE].[RESPONSERATE],
        [MKTSEGMENTATIONACTIVE].[RESPONDERS],
        [MKTSEGMENTATIONACTIVE].[RESPONSES]
      from dbo.[MKTSEGMENTATION]
      left join dbo.[MKTSEGMENTATIONACTIVE] on [MKTSEGMENTATIONACTIVE].[ID] = [MKTSEGMENTATION].[ID]
      where 
        (@CURRENCYID is null)
        or (@CURRENCYID = @ORGANIZATIONCURRENCYID)
        or @CURRENCYID = [MKTSEGMENTATIONACTIVE].[BASECURRENCYID]

      union all

      select
        [MKTSEGMENTATION].[ID],
        [MKTSEGMENTATION].[ACTIVE],
        [MKTSEGMENTATION].[ACTIVATEDATE],
        [MKTSEGMENTATIONACTIVE].[ID] as [MKTSEGMENTATIONACTIVEID],
        case
          when [LATESTORGANIZATIONEXCHANGERATE].[RATE] is not null
            then dbo.[UFN_CURRENCY_ROUND](dbo.[UFN_CURRENCY_APPLYRATE]([MKTSEGMENTATIONACTIVE].[ORGANIZATIONTOTALGIFTAMOUNT], [LATESTORGANIZATIONEXCHANGERATE].[RATE]), @DECIMALDIGITS, @ROUNDINGTYPECODE)
          when [LATESTINVERSEORGANIZATIONEXCHANGERATE].RATE is not null
            then dbo.[UFN_CURRENCY_ROUND](dbo.[UFN_CURRENCY_APPLYRATE]([MKTSEGMENTATIONACTIVE].[ORGANIZATIONTOTALGIFTAMOUNT], cast((1 / [LATESTINVERSEORGANIZATIONEXCHANGERATE].[RATE]) as decimal(20,8))), @DECIMALDIGITS, @ROUNDINGTYPECODE)
          else 0
        end [TOTALGIFTAMOUNTINCURRENCY],
        case
          when [LATESTORGANIZATIONEXCHANGERATE].[RATE] is not null
            then dbo.[UFN_CURRENCY_ROUND](dbo.[UFN_CURRENCY_APPLYRATE]([MKTSEGMENTATIONACTIVE].[ORGANIZATIONTOTALCOST], [LATESTORGANIZATIONEXCHANGERATE].RATE), @DECIMALDIGITS, @ROUNDINGTYPECODE)
          when [LATESTINVERSEORGANIZATIONEXCHANGERATE].RATE is not null
            then dbo.[UFN_CURRENCY_ROUND](dbo.[UFN_CURRENCY_APPLYRATE]([MKTSEGMENTATIONACTIVE].[ORGANIZATIONTOTALCOST], cast((1 / [LATESTINVERSEORGANIZATIONEXCHANGERATE].[RATE]) as decimal(20,8))), @DECIMALDIGITS, @ROUNDINGTYPECODE)
          else 0
        end [TOTALCOSTINCURRENCY],
        [MKTSEGMENTATIONACTIVE].[QUANTITY],
        [MKTSEGMENTATIONACTIVE].[RESPONSERATE],
        [MKTSEGMENTATIONACTIVE].[RESPONDERS],
        [MKTSEGMENTATIONACTIVE].[RESPONSES]
      from dbo.[MKTSEGMENTATION]
      left join dbo.[MKTSEGMENTATIONACTIVE] on [MKTSEGMENTATIONACTIVE].[ID] = [MKTSEGMENTATION].[ID]
      outer apply
      (
        select [RATE]
        from dbo.[CURRENCYEXCHANGERATE]
        where
          @ORGANIZATIONCURRENCYID = [CURRENCYEXCHANGERATE].[FROMCURRENCYID]
          and @CURRENCYID = [CURRENCYEXCHANGERATE].[TOCURRENCYID]
          and [CURRENCYEXCHANGERATE].[TYPECODE] in (0,1)
     and [CURRENCYEXCHANGERATE].[ISLATESTRATEFORASOFDATE] = 1
          and [MKTSEGMENTATION].[ACTIVATEDATE] >= [CURRENCYEXCHANGERATE].[ASOFDATESDTZ]
          and [MKTSEGMENTATION].[ACTIVATEDATE] <= [CURRENCYEXCHANGERATE].[NEXTRATEASOFDATEORMAXSDTZ]
      ) [LATESTORGANIZATIONEXCHANGERATE]
      outer apply
      (
        select RATE
        from dbo.[CURRENCYEXCHANGERATE]
        where
          @CURRENCYID = [CURRENCYEXCHANGERATE].[FROMCURRENCYID]
          and @ORGANIZATIONCURRENCYID = [CURRENCYEXCHANGERATE].[TOCURRENCYID]
          and [CURRENCYEXCHANGERATE].[TYPECODE] in (0,1)
          and [CURRENCYEXCHANGERATE].[ISLATESTRATEFORASOFDATE] = 1
          and [MKTSEGMENTATION].[ACTIVATEDATE] >= [CURRENCYEXCHANGERATE].[ASOFDATESDTZ]
          and [MKTSEGMENTATION].[ACTIVATEDATE] <= [CURRENCYEXCHANGERATE].[NEXTRATEASOFDATEORMAXSDTZ]
      ) [LATESTINVERSEORGANIZATIONEXCHANGERATE]
      where 
        (@CURRENCYID is not null
        and (@CURRENCYID <> @ORGANIZATIONCURRENCYID)
        and @CURRENCYID <> [MKTSEGMENTATIONACTIVE].[BASECURRENCYID]
    )

    --Calculating MKTSegmentBuget fields in currency along with exposing CTE fields.

    select
      [MKTSEGMENTATION_CTE].[ID],
      [MKTSEGMENTATION_CTE].[ACTIVE],
      [MKTSEGMENTATION_CTE].[MKTSEGMENTATIONACTIVEID],
      [MKTSEGMENTATION_CTE].[TOTALGIFTAMOUNTINCURRENCY],
      [MKTSEGMENTATION_CTE].[TOTALCOSTINCURRENCY],
      [MKTSEGMENTATION_CTE].[QUANTITY],
      [MKTSEGMENTATION_CTE].[RESPONSERATE],
      [MKTSEGMENTATION_CTE].[RESPONDERS],
      [MKTSEGMENTATION_CTE].[RESPONSES],
      [MKTSEGMENTATIONBUDGET].[ID] as [MKTSEGMENTATIONBUDGETID],
      case 
        when (@CURRENCYID is null) or (@CURRENCYID = @ORGANIZATIONCURRENCYID)
          then [MKTSEGMENTATIONBUDGET].[ORGANIZATIONFIXEDCOST]
        else [MKTSEGMENTATIONBUDGET].[FIXEDCOST]
      end [FIXEDCOSTINCURRENCY]
    from [MKTSEGMENTATION_CTE]
    left join dbo.[MKTSEGMENTATIONBUDGET] on [MKTSEGMENTATION_CTE].[ID] = [MKTSEGMENTATIONBUDGET].[ID]
    where 
      (@CURRENCYID is null)
      or (@CURRENCYID = @ORGANIZATIONCURRENCYID)
      or @CURRENCYID = [MKTSEGMENTATIONBUDGET].[BASECURRENCYID]

    union all

    select
      [MKTSEGMENTATION_CTE].[ID],
      [MKTSEGMENTATION_CTE].[ACTIVE],
      [MKTSEGMENTATION_CTE].[MKTSEGMENTATIONACTIVEID],
      [MKTSEGMENTATION_CTE].[TOTALGIFTAMOUNTINCURRENCY],
      [MKTSEGMENTATION_CTE].[TOTALCOSTINCURRENCY],
      [MKTSEGMENTATION_CTE].[QUANTITY],
      [MKTSEGMENTATION_CTE].[RESPONSERATE],
      [MKTSEGMENTATION_CTE].[RESPONDERS],
      [MKTSEGMENTATION_CTE].[RESPONSES],
      [MKTSEGMENTATIONBUDGET].[ID] as [MKTSEGMENTATIONBUDGETID],
      case
        when [LATESTORGANIZATIONEXCHANGERATE].[RATE] is not null
          then dbo.[UFN_CURRENCY_ROUND](dbo.[UFN_CURRENCY_APPLYRATE]([MKTSEGMENTATIONBUDGET].[ORGANIZATIONFIXEDCOST], [LATESTORGANIZATIONEXCHANGERATE].[RATE]), @DECIMALDIGITS, @ROUNDINGTYPECODE)
        when [LATESTINVERSEORGANIZATIONEXCHANGERATE].[RATE] is not null
          then dbo.[UFN_CURRENCY_ROUND](dbo.[UFN_CURRENCY_APPLYRATE]([MKTSEGMENTATIONBUDGET].[ORGANIZATIONFIXEDCOST], cast((1 / [LATESTINVERSEORGANIZATIONEXCHANGERATE].[RATE]) as decimal(20,8))), @DECIMALDIGITS, @ROUNDINGTYPECODE)
        else 0
      end [FIXEDCOSTINCURRENCY]
    from [MKTSEGMENTATION_CTE]
    left join dbo.[MKTSEGMENTATIONBUDGET] on [MKTSEGMENTATION_CTE].[ID] = [MKTSEGMENTATIONBUDGET].[ID]
    outer apply
      (
        select [RATE]
        from dbo.[CURRENCYEXCHANGERATE]
        where
          @ORGANIZATIONCURRENCYID = [CURRENCYEXCHANGERATE].[FROMCURRENCYID]
          and @CURRENCYID = [CURRENCYEXCHANGERATE].[TOCURRENCYID]
          and [CURRENCYEXCHANGERATE].[TYPECODE] in (0,1)
          and [CURRENCYEXCHANGERATE].[ISLATESTRATEFORASOFDATE] = 1
          and [MKTSEGMENTATION_CTE].[ACTIVATEDATE] >= [CURRENCYEXCHANGERATE].[ASOFDATESDTZ]
          and [MKTSEGMENTATION_CTE].[ACTIVATEDATE] <= [CURRENCYEXCHANGERATE].[NEXTRATEASOFDATEORMAXSDTZ]
      ) [LATESTORGANIZATIONEXCHANGERATE]
      outer apply
      (
          select [RATE]
          from dbo.[CURRENCYEXCHANGERATE]
          where
            @CURRENCYID = [CURRENCYEXCHANGERATE].[FROMCURRENCYID]
            and @ORGANIZATIONCURRENCYID = [CURRENCYEXCHANGERATE].[TOCURRENCYID]
            and [CURRENCYEXCHANGERATE].[TYPECODE] in (0,1)
            and [CURRENCYEXCHANGERATE].[ISLATESTRATEFORASOFDATE] = 1
            and [MKTSEGMENTATION_CTE].[ACTIVATEDATE] >= [CURRENCYEXCHANGERATE].[ASOFDATESDTZ]
            and [MKTSEGMENTATION_CTE].[ACTIVATEDATE] <= [CURRENCYEXCHANGERATE].[NEXTRATEASOFDATEORMAXSDTZ]
      ) [LATESTINVERSEORGANIZATIONEXCHANGERATE]
      where (@CURRENCYID is not null
        and (@CURRENCYID <> @ORGANIZATIONCURRENCYID)
        and @CURRENCYID <> [MKTSEGMENTATIONBUDGET].[BASECURRENCYID]
  )