UFN_REVENUE_GETDONORRETENTION
Provide percentage of donors retained
Return
Return Type |
---|
decimal(5, 2) |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@CONSTITUENTID | uniqueidentifier | IN | |
@EVENTID | uniqueidentifier | IN |
Definition
Copy
CREATE function [dbo].[UFN_REVENUE_GETDONORRETENTION]
(
@CONSTITUENTID uniqueidentifier
,@EVENTID uniqueidentifier
)
returns decimal (5, 2)
with execute as caller
as begin
declare @PRIORYEAREVENTID as uniqueidentifier, @PERDONORRETAINED decimal (5, 2)
SELECT @PRIORYEAREVENTID= EE.PRIORYEAREVENTID FROM EVENT E JOIN EVENTEXTENSION EE ON E.ID= EE.EVENTID WHERE E.ID= @EVENTID
;WITH GET_DONOR_EVENT
AS
( SELECT 'PE' AS EVENTSTATE, RR.CONSTITUENTID, ER.TRANSACTIONTYPE, ER.[ORIGINAL AMOUNT], ER.[APPLIED AMOUNT], ER.REVENUESPLITID, ER.CONSTITUENTID AS DCONSTITUENTID
FROM [DBO].[UFN_REVENUE_EVENT](@PRIORYEAREVENTID) AS ER
INNER JOIN REVENUERECOGNITION RR ON RR.REVENUESPLITID= ER.REVENUESPLITID
WHERE RR.CONSTITUENTID = @CONSTITUENTID
UNION
SELECT 'CE' AS EVENTSTATE, RR.CONSTITUENTID, ER.TRANSACTIONTYPE, ER.[ORIGINAL AMOUNT], ER.[APPLIED AMOUNT], ER.REVENUESPLITID, ER.CONSTITUENTID AS DCONSTITUENTID
FROM [DBO].[UFN_REVENUE_EVENT](@EVENTID) AS ER
INNER JOIN REVENUERECOGNITION RR ON RR.REVENUESPLITID= ER.REVENUESPLITID
WHERE RR.CONSTITUENTID = @CONSTITUENTID
)
, GET_DONOR_COUNT
AS
(
SELECT COUNT(DISTINCT DCONSTITUENTID) AS NumDonorsCEPE, (SELECT COUNT (DISTINCT DCONSTITUENTID) FROM GET_DONOR_EVENT WHERE EVENTSTATE= 'PE') AS NumDonorsPE
FROM GET_DONOR_EVENT
WHERE EVENTSTATE= 'PE'
AND DCONSTITUENTID IN (SELECT DCONSTITUENTID FROM GET_DONOR_EVENT WHERE EVENTSTATE= 'CE')
)
SELECT @PERDONORRETAINED= (case when ISNULL(NumDonorsCEPE, '')= '' OR ISNULL(NumDonorsPE, '')= '' THEN 0.0 ELSE cast(NumDonorsCEPE as float)/cast(NumDonorsPE as float) END)
FROM GET_DONOR_COUNT
RETURN
(
@PERDONORRETAINED
)
end