USP_DATALIST_MKTASKLADDERRESPONSE
Analyze the response rates of ask ladders.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@SELECTIONID | uniqueidentifier | IN | Selection ID |
@CURRENTAPPUSERID | uniqueidentifier | IN | Input parameter indicating the ID of the current user. |
@SECURITYFEATUREID | uniqueidentifier | IN | Input parameter indicating the ID of the feature to use for site security checking. |
@SECURITYFEATURETYPE | tinyint | IN | Input parameter indicating the type of the feature to use for site security checking. |
@EFFORTID | uniqueidentifier | IN | Effort ID |
@FILTERTYPECODE | int | IN | Filter Type Code ID |
@CURRENCYCODE | tinyint | IN | Currency |
Definition
Copy
CREATE procedure dbo.[USP_DATALIST_MKTASKLADDERRESPONSE]
(
@SELECTIONID uniqueidentifier = null,
@CURRENTAPPUSERID uniqueidentifier = null,
@SECURITYFEATUREID uniqueidentifier = null,
@SECURITYFEATURETYPE tinyint = null,
@EFFORTID uniqueidentifier = null,
@FILTERTYPECODE int = 0,
@CURRENCYCODE tinyint = 1
)
with execute as owner
as
set nocount on;
declare @SQL nvarchar(max);
declare @FROMSQL nvarchar(max);
declare @WITHBLOCKSQL nvarchar(max);
declare @GIFTIDSET nvarchar(128);
declare @SEGMENTATIONID uniqueidentifier;
declare @RECORDSOURCEID uniqueidentifier;
declare @SELECTIONNAME nvarchar(300);
declare @MAILINGDATATABLENAME nvarchar(128);
declare @LISTMATCHBACKTABLE nvarchar(128);
declare @LISTIDSQL nvarchar(128);
declare @SELECTSQL nvarchar(max);
declare @ORGANIZATIONCURRENCYID uniqueidentifier = dbo.[UFN_CURRENCY_GETORGANIZATIONCURRENCY]();
/* When the ask ladder is in a different currency than organization, if the conversion rates are not set up
perfectly, there could be conversion issues with matching gifts to the proper ask value. So the conversion
error bar was introduced to match ask ladders that are close by a percentage, like matching 4.94 with 5. */
declare @CONVERSIONERRORBAR decimal(3,2) = .02;
declare @USEERRORBAR bit;
declare @ENTRYAMOUNTTABLE table (
[RECORDSOURCEID] uniqueidentifier,
[OBJECTKEY] nvarchar(128),
[ENTRYAMOUNT] nvarchar(255)
);
declare @ALLTABLE table (
[ASKLADDERITEMID] uniqueidentifier,
[ASK1] int,
[ASK2] int,
[ASK3] int,
[ASK4] int,
[ASK5] int,
[TOTAL] int
);
if @SELECTIONID is not null
begin
--Get returned parameter translations
select @SELECTIONNAME = [NAME]
from dbo.[IDSETREGISTER]
where [ID] = @SELECTIONID;
end;
--Build Segmentation cursor
declare @SEGMENTATIONCURSOR cursor;
if @FILTERTYPECODE = 0 begin
set @SQL = 'set @SEGMENTATIONCURSOR = cursor local fast_forward for' + char(13) +
' select [MKTSEGMENTATIONACTIVATE].[SEGMENTATIONID]' + char(13) +
' from dbo.[MKTSEGMENTATIONACTIVATE]' + char(13) +
' inner join dbo.[MKTSEGMENTATION] on [MKTSEGMENTATION].[ID] = [MKTSEGMENTATIONACTIVATE].[SEGMENTATIONID]' + char(13) +
' where dbo.[UFN_SITEALLOWEDFORUSER](''' + convert(nvarchar(36), @CURRENTAPPUSERID) + ''', [MKTSEGMENTATION].[SITEID]) = 1' + char(13) +
' and [MKTSEGMENTATION].[ACTIVE] = 1 and [MKTSEGMENTATION].[MAILINGTYPECODE] <> 4;' + char(13) +
'open @SEGMENTATIONCURSOR;';
end
if @FILTERTYPECODE = 1 begin
set @SQL = 'set @SEGMENTATIONCURSOR = cursor local fast_forward for' + char(13) +
' select [IDSET].[ID]' + char(13) +
' from dbo.' + dbo.[UFN_MKTSELECTION_GETFUNCTIONNAME](@SELECTIONID) + ' as [IDSET]' + char(13) +
' inner join dbo.[MKTSEGMENTATIONACTIVATE] on [IDSET].[ID] = [MKTSEGMENTATIONACTIVATE].[SEGMENTATIONID]' + char(13) +
' inner join dbo.[MKTSEGMENTATION] on [MKTSEGMENTATION].[ID] = [IDSET].[ID]' + char(13) +
' where dbo.[UFN_SITEALLOWEDFORUSER](''' + convert(nvarchar(36), @CURRENTAPPUSERID) + ''', [MKTSEGMENTATION].[SITEID]) = 1' + char(13) +
' and [MKTSEGMENTATION].[ACTIVE] = 1 and [MKTSEGMENTATION].[MAILINGTYPECODE] <> 4;' + char(13) +
'open @SEGMENTATIONCURSOR;';
end;
if @FILTERTYPECODE = 2 begin
set @SQL = 'set @SEGMENTATIONCURSOR = cursor local fast_forward for' + char(13) +
' select [MKTSEGMENTATIONACTIVATE].[SEGMENTATIONID]' + char(13) +
' from dbo.[MKTSEGMENTATIONACTIVATE]' + char(13) +
' inner join dbo.[MKTSEGMENTATION] on [MKTSEGMENTATION].[ID] = [MKTSEGMENTATIONACTIVATE].[SEGMENTATIONID]' + char(13) +
' where dbo.[UFN_SITEALLOWEDFORUSER](''' + convert(nvarchar(36), @CURRENTAPPUSERID) + ''', [MKTSEGMENTATION].[SITEID]) = 1' + char(13) +
' and [MKTSEGMENTATION].[ACTIVE] = 1 and [MKTSEGMENTATION].[MAILINGTYPECODE] <> 4 and [MKTSEGMENTATIONACTIVATE].[SEGMENTATIONID] = ''' + convert(nvarchar(36), @EFFORTID) + ''';' + char(13) +
'open @SEGMENTATIONCURSOR;';
end
-- might as well leave UFN_SITEALLOWEDFORUSER up there, to cut down on the number of rows the real site security has to check
-- they still need to be checked, though, because of the link between site security and the role in which access to a datalist is granted
exec sp_executesql @SQL, N'@SEGMENTATIONCURSOR cursor output, @RECORDSOURCEID uniqueidentifier', @SEGMENTATIONCURSOR = @SEGMENTATIONCURSOR output, @RECORDSOURCEID = @RECORDSOURCEID;
--Loop through each Mailing
fetch next from @SEGMENTATIONCURSOR into @SEGMENTATIONID;
while (@@FETCH_STATUS = 0)
begin
if ( -- check site security
select count(*)
from (select [SITEID]
from dbo.[MKTSEGMENTATION]
where [ID] = @SEGMENTATIONID)
as [SEGMENTATIONSITE]
where (dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 1 or exists (select 1 from dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID,@SECURITYFEATUREID,@SECURITYFEATURETYPE) where SITEID=[SEGMENTATIONSITE].[SITEID] or (SITEID is null and [SEGMENTATIONSITE].[SITEID] is null)))
) > 0
begin
set @MAILINGDATATABLENAME = dbo.[UFN_MKTSEGMENTATIONACTIVATE_MAKETABLENAME](@SEGMENTATIONID);
--Loop through each record source for the mailing
declare RECORDSOURCECURSOR cursor local fast_forward for
select distinct [RECORDSOURCEID]
from dbo.[MKTSEGMENTATIONACTIVATE]
where [SEGMENTATIONID] = @SEGMENTATIONID;
open RECORDSOURCECURSOR;
fetch next from RECORDSOURCECURSOR into @RECORDSOURCEID;
while(@@FETCH_STATUS = 0)
begin
--Get the entry amount column to display later
insert into @ENTRYAMOUNTTABLE
select distinct
@RECORDSOURCEID,
[MF].[OBJECTKEY],
[MF].[PARENTTYPE] + ' \ ' + [MF].[DISPLAYNAME]
from dbo.[UFN_MKTASKLADDER_GETMONEYFIELDS](@RECORDSOURCEID) [MF];
--Get the gifts for this mailing on this record source
select
@GIFTIDSET = dbo.[UFN_MKTSELECTION_GETFUNCTIONNAME]([NORMALGIFTIDSETREGISTERID]),
@LISTMATCHBACKTABLE = dbo.[UFN_MKTRECORDSOURCE_MAKEMATCHBACKTABLENAME]([RECORDSOURCEID])
from dbo.[MKTSEGMENTATIONACTIVATE]
where [SEGMENTATIONID] = @SEGMENTATIONID
and [RECORDSOURCEID] = @RECORDSOURCEID;
--Make sure all the ask ladder items are in the table
set @SQL = 'select distinct [MKTASKLADDERITEM].[ID], 0, 0, 0, 0, 0, 0' + char(13) +
'from dbo.[MKTASKLADDERITEM]' + char(13) +
'inner join dbo.[' + @MAILINGDATATABLENAME + '] as [MAILINGDATA] on [MKTASKLADDERITEM].[ASKLADDERID] = [MAILINGDATA].[ASKLADDERID]';
insert into @ALLTABLE
exec (@SQL);
set @FROMSQL = ' from dbo.[MKTASKLADDERITEM] as [ITEM]' + char(13) +
' inner join dbo.[' + @MAILINGDATATABLENAME + '] as [MAILINGDATA] on [ITEM].[ASKLADDERID] = [MAILINGDATA].[ASKLADDERID] and [MAILINGDATA].[ENTRYAMOUNT] between [ITEM].[MINIMUMENTRYAMOUNT] and ([ITEM].[NEXTMINIMUMENTRYAMOUNT] - 0.0001)' + char(13) +
' inner join dbo.' + @GIFTIDSET + ' as [GIFTS] on cast([MAILINGDATA].[DONORID] as varchar(36)) = cast([GIFTS].[DONORID] as varchar(36))' + char(13) +
' where [MAILINGDATA].[DONORQUERYVIEWCATALOGID] = @RECORDSOURCEID';
-- Use conversion error bars +/- % for matching gifts to ask ladder when effort currency is different than organization currency.
select
@USEERRORBAR = case when [BASECURRENCYID] <> @ORGANIZATIONCURRENCYID then 1 else 0 end
from dbo.[MKTSEGMENTATION]
where [ID] = @SEGMENTATIONID;
if @USEERRORBAR = 1
begin
set @WITHBLOCKSQL = 'with [ASKLADDERMATCHES] as (' + char(13) +
' select' + char(13) +
' [ITEM].[ID] as [ITEMID],' + char(13) +
' [GIFTS].[AMOUNT] as [GIFTAMOUNT],' + char(13) +
' dbo.[UFN_MKTASKLADDER_CALCVALUE]([ITEM].[TYPECODE],[MAILINGDATA].[ENTRYAMOUNT],[ITEM].[ITEMVALUE1],[ITEM].[ROUNDTOAMOUNT],[ITEM].[MINIMUMENTRYAMOUNT]) as [ASK1],' + char(13) +
' dbo.[UFN_MKTASKLADDER_CALCVALUE]([ITEM].[TYPECODE],[MAILINGDATA].[ENTRYAMOUNT],[ITEM].[ITEMVALUE2],[ITEM].[ROUNDTOAMOUNT],[ITEM].[MINIMUMENTRYAMOUNT]) as [ASK2],' + char(13) +
' dbo.[UFN_MKTASKLADDER_CALCVALUE]([ITEM].[TYPECODE],[MAILINGDATA].[ENTRYAMOUNT],[ITEM].[ITEMVALUE3],[ITEM].[ROUNDTOAMOUNT],[ITEM].[MINIMUMENTRYAMOUNT]) as [ASK3],' + char(13) +
' dbo.[UFN_MKTASKLADDER_CALCVALUE]([ITEM].[TYPECODE],[MAILINGDATA].[ENTRYAMOUNT],[ITEM].[ITEMVALUE4],[ITEM].[ROUNDTOAMOUNT],[ITEM].[MINIMUMENTRYAMOUNT]) as [ASK4],' + char(13) +
' dbo.[UFN_MKTASKLADDER_CALCVALUE]([ITEM].[TYPECODE],[MAILINGDATA].[ENTRYAMOUNT],[ITEM].[ITEMVALUE5],[ITEM].[ROUNDTOAMOUNT],[ITEM].[MINIMUMENTRYAMOUNT]) as [ASK5],' + char(13) +
' abs([GIFTS].[AMOUNT] - dbo.[UFN_MKTASKLADDER_CALCVALUE]([ITEM].[TYPECODE],[MAILINGDATA].[ENTRYAMOUNT],[ITEM].[ITEMVALUE1],[ITEM].[ROUNDTOAMOUNT],[ITEM].[MINIMUMENTRYAMOUNT])) as [ASK1DIFFERENCE],' + char(13) +
' abs([GIFTS].[AMOUNT] - dbo.[UFN_MKTASKLADDER_CALCVALUE]([ITEM].[TYPECODE],[MAILINGDATA].[ENTRYAMOUNT],[ITEM].[ITEMVALUE2],[ITEM].[ROUNDTOAMOUNT],[ITEM].[MINIMUMENTRYAMOUNT])) as [ASK2DIFFERENCE],' + char(13) +
' abs([GIFTS].[AMOUNT] - dbo.[UFN_MKTASKLADDER_CALCVALUE]([ITEM].[TYPECODE],[MAILINGDATA].[ENTRYAMOUNT],[ITEM].[ITEMVALUE3],[ITEM].[ROUNDTOAMOUNT],[ITEM].[MINIMUMENTRYAMOUNT])) as [ASK3DIFFERENCE],' + char(13) +
' abs([GIFTS].[AMOUNT] - dbo.[UFN_MKTASKLADDER_CALCVALUE]([ITEM].[TYPECODE],[MAILINGDATA].[ENTRYAMOUNT],[ITEM].[ITEMVALUE4],[ITEM].[ROUNDTOAMOUNT],[ITEM].[MINIMUMENTRYAMOUNT])) as [ASK4DIFFERENCE],' + char(13) +
' abs([GIFTS].[AMOUNT] - dbo.[UFN_MKTASKLADDER_CALCVALUE]([ITEM].[TYPECODE],[MAILINGDATA].[ENTRYAMOUNT],[ITEM].[ITEMVALUE5],[ITEM].[ROUNDTOAMOUNT],[ITEM].[MINIMUMENTRYAMOUNT])) as [ASK5DIFFERENCE],' + char(13) +
' 1 as [TOTAL]' + char(13);
set @SELECTSQL = 'select' + char(13) +
' [ITEMID],' + char(13) +
--Match when gift amount is close to the ask ladder amount, and the is closest to the ask value compared to the other ask values.
' case when [GIFTAMOUNT] between ((1 - @CONVERSIONERRORBAR) * [ASK1]) and ((1 + @CONVERSIONERRORBAR) * [ASK1]) and [ASK1DIFFERENCE] <= [ASK2DIFFERENCE] then 1 else 0 end,' + char(13) +
' case when [GIFTAMOUNT] between ((1 - @CONVERSIONERRORBAR) * [ASK2]) and ((1 + @CONVERSIONERRORBAR) * [ASK2]) and [ASK2DIFFERENCE] < [ASK1DIFFERENCE] and [ASK2DIFFERENCE] <= [ASK3DIFFERENCE] then 1 else 0 end,' + char(13) +
' case when [GIFTAMOUNT] between ((1 - @CONVERSIONERRORBAR) * [ASK3]) and ((1 + @CONVERSIONERRORBAR) * [ASK3]) and [ASK3DIFFERENCE] < [ASK2DIFFERENCE] and [ASK3DIFFERENCE] <= [ASK4DIFFERENCE] then 1 else 0 end,' + char(13) +
' case when [GIFTAMOUNT] between ((1 - @CONVERSIONERRORBAR) * [ASK4]) and ((1 + @CONVERSIONERRORBAR) * [ASK4]) and [ASK4DIFFERENCE] < [ASK3DIFFERENCE] and [ASK4DIFFERENCE] <= [ASK5DIFFERENCE] then 1 else 0 end,' + char(13) +
' case when [GIFTAMOUNT] between ((1 - @CONVERSIONERRORBAR) * [ASK5]) and ((1 + @CONVERSIONERRORBAR) * [ASK5]) and [ASK5DIFFERENCE] < [ASK4DIFFERENCE] then 1 else 0 end,' + char(13) +
' [TOTAL]' + char(13) +
'from [ASKLADDERMATCHES]';
end
else
set @SELECTSQL = 'select ' + char(13) +
' [ITEM].[ID], ' + char(13) +
' (case when [GIFTS].[AMOUNT] = dbo.[UFN_MKTASKLADDER_CALCVALUE]([ITEM].[TYPECODE],[MAILINGDATA].[ENTRYAMOUNT],[ITEM].[ITEMVALUE1],[ITEM].[ROUNDTOAMOUNT],[ITEM].[MINIMUMENTRYAMOUNT]) then 1 else 0 end),' + char(13) +
' (case when [GIFTS].[AMOUNT] = dbo.[UFN_MKTASKLADDER_CALCVALUE]([ITEM].[TYPECODE],[MAILINGDATA].[ENTRYAMOUNT],[ITEM].[ITEMVALUE2],[ITEM].[ROUNDTOAMOUNT],[ITEM].[MINIMUMENTRYAMOUNT]) then 1 else 0 end),' + char(13) +
' (case when [GIFTS].[AMOUNT] = dbo.[UFN_MKTASKLADDER_CALCVALUE]([ITEM].[TYPECODE],[MAILINGDATA].[ENTRYAMOUNT],[ITEM].[ITEMVALUE3],[ITEM].[ROUNDTOAMOUNT],[ITEM].[MINIMUMENTRYAMOUNT]) then 1 else 0 end),' + char(13) +
' (case when [GIFTS].[AMOUNT] = dbo.[UFN_MKTASKLADDER_CALCVALUE]([ITEM].[TYPECODE],[MAILINGDATA].[ENTRYAMOUNT],[ITEM].[ITEMVALUE4],[ITEM].[ROUNDTOAMOUNT],[ITEM].[MINIMUMENTRYAMOUNT]) then 1 else 0 end),' + char(13) +
' (case when [GIFTS].[AMOUNT] = dbo.[UFN_MKTASKLADDER_CALCVALUE]([ITEM].[TYPECODE],[MAILINGDATA].[ENTRYAMOUNT],[ITEM].[ITEMVALUE5],[ITEM].[ROUNDTOAMOUNT],[ITEM].[MINIMUMENTRYAMOUNT]) then 1 else 0 end),' + char(13) +
' 1' + char(13);
--Insert all non list gifts into their buckets
if @USEERRORBAR = 1
set @SQL = @WITHBLOCKSQL + @FROMSQL + char(13) + ')' + char(13) + @SELECTSQL + ';';
else
set @SQL = @SELECTSQL + @FROMSQL + ';';
insert into @ALLTABLE
exec sp_executesql @SQL, N'@RECORDSOURCEID uniqueidentifier, @CONVERSIONERRORBAR decimal(3,2)', @RECORDSOURCEID = @RECORDSOURCEID, @CONVERSIONERRORBAR = @CONVERSIONERRORBAR;
--Check if the mailing contains any lists...
if exists(select 1 from dbo.[MKTSEGMENTATIONSEGMENT] inner join dbo.[MKTSEGMENTATIONSEGMENTLIST] on [MKTSEGMENTATIONSEGMENTLIST].[ID] = [MKTSEGMENTATIONSEGMENT].[ID] where [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] = @SEGMENTATIONID)
begin
--See if we need to cast the person ID from the list matchback table(s) in the list joins...
select @LISTIDSQL = (case when [DATA_TYPE] = 'uniqueidentifier' then '[LISTDONORS].[ID]' else 'cast([LISTDONORS].[ID] as varchar(36))' end)
from [INFORMATION_SCHEMA].[COLUMNS]
where [TABLE_SCHEMA] = 'dbo'
and [TABLE_NAME] = @MAILINGDATATABLENAME
and [COLUMN_NAME] = 'DONORID';
set @FROMSQL = ' from dbo.[MKTASKLADDERITEM] as [ITEM]' + char(13) +
' inner join dbo.[' + @MAILINGDATATABLENAME + '] as [MAILINGDATA] on [ITEM].[ASKLADDERID] = [MAILINGDATA].[ASKLADDERID] and isnull([MAILINGDATA].[ENTRYAMOUNT],0) between [ITEM].[MINIMUMENTRYAMOUNT] and ([ITEM].[NEXTMINIMUMENTRYAMOUNT] - 0.0001)' + char(13) +
' inner join dbo.[MKTSEGMENTATIONSEGMENTLIST] on [MKTSEGMENTATIONSEGMENTLIST].[ID] = [MAILINGDATA].[SEGMENTID]' + char(13) +
' inner join dbo.[' + @LISTMATCHBACKTABLE + '] as [LISTDONORS] on ' + @LISTIDSQL + ' = [MAILINGDATA].[DONORID]' + char(13) +
' inner join dbo.' + @GIFTIDSET + ' as [GIFTS] on [LISTDONORS].[GIFTID] = [GIFTS].[ID]' + char(13) +
' where [LISTDONORS].[SEGMENTATIONID] = @SEGMENTATIONID';
--Insert all non list gifts into their buckets
if @USEERRORBAR = 1
set @SQL = @WITHBLOCKSQL + char(13) + @FROMSQL + ')' + char(13) + @SELECTSQL + ';';
else
set @SQL = @SELECTSQL + @FROMSQL + ';';
insert into @ALLTABLE
exec sp_executesql @SQL, N'@SEGMENTATIONID uniqueidentifier, @CONVERSIONERRORBAR decimal(3,2)', @SEGMENTATIONID = @SEGMENTATIONID, @CONVERSIONERRORBAR = @CONVERSIONERRORBAR;
end
fetch next from RECORDSOURCECURSOR into @RECORDSOURCEID;
end;
close RECORDSOURCECURSOR;
deallocate RECORDSOURCECURSOR;
end;
fetch next from @SEGMENTATIONCURSOR into @SEGMENTATIONID;
end;
close @SEGMENTATIONCURSOR;
deallocate @SEGMENTATIONCURSOR;
declare @SUM table (
[ASKLADDERITEMID] uniqueidentifier,
[COUNT1] int,
[COUNT2] int,
[COUNT3] int,
[COUNT4] int,
[COUNT5] int,
[COUNTOTHER] int,
[TOTAL] int);
insert into @SUM
select
[ASKLADDERITEMID],
sum([ASK1]) as [COUNT1],
sum([ASK2]) as [COUNT2],
sum([ASK3]) as [COUNT3],
sum([ASK4]) as [COUNT4],
sum([ASK5]) as [COUNT5],
(sum([TOTAL]) - sum([ASK1]) - sum([ASK2]) - sum([ASK3]) - sum([ASK4]) - sum([ASK5])) as [COUNTOTHER],
sum([TOTAL]) as [TOTAL]
from @ALLTABLE
group by [ASKLADDERITEMID];
--Display
if exists (select [ASKLADDERITEMID] from @SUM)
begin
select
[MKTASKLADDER].[NAME],
[EAT].[ENTRYAMOUNT],
case when @CURRENCYCODE = 1 then [ITEM].[ORGANIZATIONMINIMUMENTRYAMOUNT] else [ITEM].[MINIMUMENTRYAMOUNT] end as [LOW],
[ITEM].[NEXTMINIMUMENTRYAMOUNT] as [HIGH],
[ITEM].[TYPE],
--If type is multiply (1), then show the base amount because we do not want to convert the multiplier.
case when @CURRENCYCODE = 1 and [ITEM].[TYPECODE] <> 1 then [ITEM].[ORGANIZATIONITEMVALUE1] else [ITEM].[ITEMVALUE1] end as [ASK1],
[SUM].[COUNT1] as [COUNT1],
(case when [SUM].[TOTAL] > 0 then cast([SUM].[COUNT1] as decimal(20,4))/cast([SUM].[TOTAL] as decimal(20,4)) else 0 end) as [PERCENT1],
case when @CURRENCYCODE = 1 and [ITEM].[TYPECODE] <> 1 then [ITEM].[ORGANIZATIONITEMVALUE2] else [ITEM].[ITEMVALUE2] end as [ASK2],
[SUM].[COUNT2] as [COUNT2],
(case when [SUM].[TOTAL] > 0 then cast([SUM].[COUNT2] as decimal(20,4))/cast([SUM].[TOTAL] as decimal(20,4)) else 0 end) as [PERCENT2],
case when @CURRENCYCODE = 1 and [ITEM].[TYPECODE] <> 1 then [ITEM].[ORGANIZATIONITEMVALUE3] else [ITEM].[ITEMVALUE3] end as [ASK3],
[SUM].[COUNT3] as [COUNT3],
(case when [SUM].[TOTAL] > 0 then cast([SUM].[COUNT3] as decimal(20,4))/cast([SUM].[TOTAL] as decimal(20,4)) else 0 end) as [PERCENT3],
case when @CURRENCYCODE = 1 and [ITEM].[TYPECODE] <> 1 then [ITEM].[ORGANIZATIONITEMVALUE4] else [ITEM].[ITEMVALUE4] end as [ASK4],
[SUM].[COUNT4] as [COUNT4],
(case when [SUM].[TOTAL] > 0 then cast([SUM].[COUNT4] as decimal(20,4))/cast([SUM].[TOTAL] as decimal(20,4)) else 0 end) as [PERCENT4],
case when @CURRENCYCODE = 1 and [ITEM].[TYPECODE] <> 1 then [ITEM].[ORGANIZATIONITEMVALUE5] else [ITEM].[ITEMVALUE5] end as [ASK5],
[SUM].[COUNT5] as [COUNT5],
(case when [SUM].[TOTAL] > 0 then cast([SUM].[COUNT5] as decimal(20,4))/cast([SUM].[TOTAL] as decimal(20,4)) else 0 end) as [PERCENT5],
[ITEM].[WRITEINTEXT] as [PROMPT],
[SUM].[COUNTOTHER] as [COUNTOTHER],
(case when [SUM].[TOTAL] > 0 then cast([SUM].[COUNTOTHER] as decimal(20,4))/cast([SUM].[TOTAL] as decimal(20,4)) else 0 end) as [PERCENTOTHER],
[SUM].[TOTAL] as [TOTAL],
@SELECTIONNAME as [SELECTIONNAME],
[CURRENCY].[ISO4217] as [CURRENCYISOCURRENCYCODE],
[CURRENCY].[DECIMALDIGITS] as [CURRENCYDECIMALDIGITS],
[CURRENCY].[CURRENCYSYMBOL] as [CURRENCYSYMBOL],
[CURRENCY].[SYMBOLDISPLAYSETTINGCODE] as [CURRENCYSYMBOLDISPLAYSETTINGCODE],
case when [MKTASKLADDER].[BASECURRENCYID] <> @ORGANIZATIONCURRENCYID then 1 else 0 end as [ROUNDINGUSED]
from @SUM as [SUM]
inner join dbo.[MKTASKLADDERITEM] as [ITEM] on [ITEM].[ID] = [SUM].[ASKLADDERITEMID]
inner join dbo.[MKTASKLADDER] on [MKTASKLADDER].[ID] = [ITEM].[ASKLADDERID]
left join (select distinct [RECORDSOURCEID], [OBJECTKEY], [ENTRYAMOUNT] from @ENTRYAMOUNTTABLE) as [EAT] on [EAT].[OBJECTKEY] = [MKTASKLADDER].[OBJECTKEY] and [EAT].[RECORDSOURCEID] = [MKTASKLADDER].[RECORDSOURCEID]
inner join dbo.[CURRENCY] on [CURRENCY].[ID] = case when @CURRENCYCODE = 1 then @ORGANIZATIONCURRENCYID else [ITEM].[BASECURRENCYID] end
order by [MKTASKLADDER].[NAME], [ITEM].[MINIMUMENTRYAMOUNT];
end
else
begin
select
null as [NAME], -- name
null as [ENTRYAMOUNT], -- entryAmount
0 as [LOW], -- low
0 as [HIGH], -- high
null as [TYPE], -- type
0 as [ASK1], -- ask1
0 as [COUNT1], -- count1
0 as [PERCENT1], -- percent1
0 as [ASK2], -- ask2
0 as [COUNT2], -- count2
0 as [PERCENT2], -- percent2
0 as [ASK3], -- ask3
0 as [COUNT3], -- count3
0 as [PERCENT3], -- percent3
0 as [ASK4], -- ask4
0 as [COUNT4], -- count4
0 as [PERCENT4], -- percent4
0 as [ASK5], -- ask5
0 as [COUNT5], -- count5
0 as [PERCENT5], -- percent5
0 as [PROMPT], -- prompt
0 as [COUNTOTHER], -- countOther
0 as [PERCENTOTHER], -- percentOther
0 as [TOTAL], -- total
@SELECTIONNAME as [SELECTIONNAME],-- selectionname
'' as [CURRENCYISOCURRENCYCODE], -- currencyIsoCurrencyCode
0 as [CURRENCYDECIMALDIGITS], -- CurrencyDecimalDigits
'' as [CURRENCYSYMBOL], -- CurrencySymbol
0 as [CURRENCYSYMBOLDISPLAYSETTINGCODE], -- CurrencySymbolDisplaySettingCode
0 as [ROUNDINGUSED]; -- RoundingUsed
end
return 0;