USP_SEGMENTGROUP_GETAVGGIFTAMOUNT
Gets the average gift amount for a given segment group.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@SEGMENTGROUPID | uniqueidentifier | IN |
Definition
Copy
create procedure dbo.USP_SEGMENTGROUP_GETAVGGIFTAMOUNT
(
@SEGMENTGROUPID uniqueidentifier
)
as
declare @TABLENAME nvarchar(255);
declare @VIEWNAME nvarchar(255);
declare @VALUECOLUMNNAME nvarchar(255);
declare TABLECURSOR cursor local fast_forward for
(
select
TABLECATALOG.TABLENAME,
IDSETREGISTER.DBOBJECTNAME,
SMARTFIELD.VALUECOLUMNNAME
from
dbo.MKTSEGMENT
left outer join dbo.IDSETREGISTER on IDSETREGISTER.ID = MKTSEGMENT.IDSETREGISTERID
left outer join dbo.MKTGROUPSEGMENTS on MKTGROUPSEGMENTS.SEGMENTID = MKTSEGMENT.ID
left outer join dbo.MKTSEGMENTSELECTION on MKTSEGMENTSELECTION.SEGMENTID = MKTSEGMENT.ID
left outer join dbo.SMARTFIELDVALUEGROUPIDSETREGISTER on SMARTFIELDVALUEGROUPIDSETREGISTER.IDSETREGISTERID = MKTSEGMENTSELECTION.SELECTIONID
left outer join dbo.SMARTFIELDVALUEGROUP on SMARTFIELDVALUEGROUP.ID = SMARTFIELDVALUEGROUPIDSETREGISTER.SMARTFIELDVALUEGROUPID
left outer join dbo.SMARTFIELD on SMARTFIELD.ID = SMARTFIELDVALUEGROUP.SMARTFIELDID
left outer join dbo.TABLECATALOG on TABLECATALOG.ID = SMARTFIELD.TABLECATALOGID
where
MKTGROUPSEGMENTS.SEGMENTGROUPID = @SEGMENTGROUPID
and SMARTFIELD.SMARTFIELDCATALOGID = 'C2A7929C-3E25-445A-81B1-BA6A0E303613'
)
declare @TOTALGIFTS money;
declare @VALUE money;
declare @TOTALCOUNT int;
declare @COUNT int;
set @TOTALGIFTS = 0.00;
set @VALUE = 0.00;
set @TOTALCOUNT = 0;
set @COUNT = 0;
open TABLECURSOR;
fetch next from TABLECURSOR into @TABLENAME, @VIEWNAME, @VALUECOLUMNNAME;
if (@@FETCH_STATUS = 0)
begin
while (@@FETCH_STATUS = 0)
begin
declare @SQL nvarchar(max);
set @SQL = 'select @VALUE = coalesce(SUM(coalesce(<%TABLENAME%>.<%VALUECOLUMNNAME%>, 0)), 0), @COUNT = COUNT(<%TABLENAME%>.ID) from dbo.<%TABLENAME%> inner join dbo.<%VIEWNAME%> on <%VIEWNAME%>.ID = <%TABLENAME%>.ID;';
set @SQL = REPLACE(REPLACE(REPLACE(@SQL, '<%VIEWNAME%>', @VIEWNAME), '<%TABLENAME%>', @TABLENAME), '<%VALUECOLUMNNAME%>', @VALUECOLUMNNAME)
exec sp_executesql @SQL, N'@VALUE money output, @COUNT int output', @VALUE output, @COUNT output;
set @TOTALGIFTS = @TOTALGIFTS + @VALUE;
set @TOTALCOUNT = @TOTALCOUNT + @COUNT;
fetch next from TABLECURSOR into @TABLENAME, @VIEWNAME, @VALUECOLUMNNAME;
end
close TABLECURSOR;
deallocate TABLECURSOR;
end
if @TOTALCOUNT > 0
select @TOTALGIFTS / @TOTALCOUNT;
else
select @TOTALGIFTS;
return 0;