UFN_FUNDRAISINGGROUP_MEMBERSNUMBER
Calculate the number of fundraising group members.
Return
Return Type |
---|
table |
Definition
Copy
CREATE function dbo.UFN_FUNDRAISINGGROUP_MEMBERSNUMBER(
)
returns TABLE
as
return
WITH
[Tmp1]
as
(
select TFT.ID GroupID,
TFT.PARENTTEAMID ParGroupID,
TE.TEAMCONSTITUENTID GConstituentID,
TF.CONSTITUENTID,
TE.EVENTID CEventID,
CEvent.PRIORYEAREVENTID ParEventID
from dbo.TEAMFUNDRAISINGTEAM TFT
join dbo.TEAMEXTENSION TE ON TE.TEAMFUNDRAISINGTEAMID = TFT.ID
join dbo.EVENTEXTENSION CEvent on CEvent.EVENTID = TE.EVENTID
join dbo.TEAMFUNDRAISINGTEAMMEMBER TFTM on TFTM.TEAMFUNDRAISINGTEAMID = TFT.ID
join dbo.TEAMFUNDRAISER TF ON TF.ID = TFTM.TEAMFUNDRAISERID
)
,[Tmp2]
as
(
select CYear.GroupID,
CYear.ParGroupID,
CYear.CEventID AS EventID,
1 CMemberTag,
(case when PYear.CONSTITUENTID is not null then 1 else 0 end) PMemberTag
from [Tmp1] CYear
left join [Tmp1] PYear on PYear.CEventID = CYear.ParEventID --and Pyear.GConstituentID = CYear.GConstituentID
and Pyear.CONSTITUENTID = Cyear.CONSTITUENTID
)
,[Tmp3]
as
(
select GroupID,
ParGroupID,
SUM(CmemberTag) MEMBERNUMBER,
SUM(PMemberTag) MEMBERNUMBERRETAINED
from [Tmp2]
group by GroupID, ParGroupID
)
,[Tmp4]
as
(
select GroupID AS ParGroupID, GroupID, MEMBERNUMBER, MEMBERNUMBERRETAINED
from [Tmp3]
union all
select F.ParGroupID, A.GroupID, A.MEMBERNUMBER, A.MEMBERNUMBERRETAINED
from [Tmp4] F
join [Tmp3] A on F.GroupID = A.ParGroupID
)
,[Tmp5]
as
(
select ParGroupID GroupID,
SUM(MEMBERNUMBER) as MemberNumber,
SUM(MEMBERNUMBERRETAINED) as MemberNumberRetained
from [Tmp4]
Group by ParGroupID
)
select GroupID,
MEMBERNUMBER,
MEMBERNUMBERRETAINED,
MEMBERNUMBER - MEMBERNUMBERRETAINED as MEMBERNUMBERNEW,
CASE WHEN MEMBERNUMBER=0 THEN 0 ELSE MEMBERNUMBERRETAINED/MEMBERNUMBER END AS PARTMEMBERNUMBERRETAINED
from [Tmp5]