spGetEmailLinks
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@EMailID | int | IN |
Definition
Copy
CREATE PROCEDURE [dbo].[spGetEmailLinks]
( @EMailID INT ) AS
BEGIN
DECLARE @TotalEmailLinks INT
DECLARE @TotalTransactions INT
DECLARE @EmailLinksStatsTable TABLE
(
ID INT
, EmailID INT
, PID INT
, PageName NVARCHAR(500)
, URL NVARCHAR(max)
, Hits INT
, Visitors INT
, DocumentId INT
,TransactionCount INT
)
--Get transaction count against each email link
DECLARE @Transactions TABLE(
TransactionData XML,
TransactionType INT
)
INSERT INTO @Transactions
SELECT
CAST(REPLACE(CAST(ET.XMLObjectData AS NVARCHAR(MAX)),'encoding="utf-8"', '')AS XML) AS TransactionData,0
FROM dbo.EventTransactions AS ET
INNER JOIN EmailJob_recipient AS ER ON ER.ID = ET.EmailJobRecipientId
WHERE ER.emailId =@EMailID and ER.Sent = 1 and ET.ISDELETED = 0
INSERT INTO @Transactions
SELECT
CAST(REPLACE(CAST(DT.XMLObjectData AS NVARCHAR(MAX)),'encoding="utf-8"', '')AS XML) AS TransactionData,1
FROM dbo.DonationTransactions AS DT
INNER JOIN EmailJob_recipient AS ER ON ER.ID = DT.EmailJobRecipientId
WHERE ER.emailId =@EMailID and ER.Sent = 1 and DT.ISDELETED = 0
INSERT INTO @Transactions
SELECT
CAST(REPLACE(CAST(MT.XMLObjectData AS NVARCHAR(MAX)),'encoding="utf-8"', '') AS XML) AS TransactionData,2
FROM dbo.MembershipTransactions AS MT
INNER JOIN EmailJob_recipient AS ER ON ER.ID = MT.EmailJobRecipientId
WHERE ER.emailId =@EMailID and ER.Sent = 1 and MT.ISDELETED = 0
DECLARE @TransactionsStats TABLE (PageId INT,PageURL nvarchar(1784))
INSERT INTO @TransactionsStats
SELECT
CASE WHEN TransactionType = 0 THEN transactionData.value('declare namespace ns="urn:blackbaud.RE7.XDATA";(/ns:ShelbyEventRegTran/ns:Origin/ns:PageID)[1]', 'NVARCHAR(30)')
WHEN TransactionType = 1 THEN transactionData.value('declare namespace ns="urn:blackbaud.RE7.XDATA";(/ns:ShelbyDonationTran/ns:Origin/ns:PageID)[1]', 'NVARCHAR(30)')
WHEN TransactionType = 2 THEN transactionData.value('declare namespace ns="urn:blackbaud.RE7.XDATA";(/ns:ShelbyMembershipTransaction/ns:Origin/ns:PageID)[1]', 'NVARCHAR(30)')
ELSE '' END AS PageID,
CASE WHEN TransactionType = 0 THEN transactionData.value('declare namespace ns="urn:blackbaud.RE7.XDATA";(/ns:ShelbyEventRegTran/ns:Origin/ns:PageURL)[1]', 'NVARCHAR(2100)')
WHEN TransactionType = 1 THEN transactionData.value('declare namespace ns="urn:blackbaud.RE7.XDATA";(/ns:ShelbyDonationTran/ns:Origin/ns:PageURL)[1]', 'NVARCHAR(2100)')
WHEN TransactionType = 2 THEN transactionData.value('declare namespace ns="urn:blackbaud.RE7.XDATA";(/ns:ShelbyMembershipTransaction/ns:Origin/ns:PageURL)[1]', 'NVARCHAR(2100)')
ELSE '' END AS PageURL
FROM @Transactions
INSERT INTO @EmailLinksStatsTable
SELECT EL.[ID]
, EL.[EmailID]
, EL.[PID]
, P.PageName
, EL.[URL]
, COUNT(S.statsid) hits
, COUNT(DISTINCT S.emailjobrecipientid) visitors
, EL.[DocumentID]
, ISNULL(T.transactionCount,0) AS TransactionCount
FROM [EmailLink] EL
LEFT OUTER JOIN SitePages P ON P.ID = EL.PID
LEFT OUTER JOIN Stats S ON S.pageid = EL.pid AND s.sourceid = EL.emailid AND S.sourcetypeid = 1
LEFT OUTER JOIN (SELECT PageId , COUNT(1) as TransactionCount,Min(PageURL) as PageURL FROM @TransactionsStats GROUP BY PageId) AS T ON T.PageId = EL.PID or T.PageURL like EL.URL+'%'
WHERE EL.EmailID = @EmailID AND EL.[PID] IS NOT null
GROUP BY EL.[ID], EL.[EmailID], EL.[PID], P.PageName, EL.[URL], EL.[DocumentID],T.TransactionCount
UNION
SELECT EL.[ID]
, EL.[EmailID]
, EL.[PID]
, P.PageName
, EL.[URL]
, COUNT(S.statsid) hits
, COUNT(DISTINCT S.emailjobrecipientid) visitors
, EL.[DocumentID]
, ISNULL(T.transactionCount,0) AS TransactionCount
FROM [EmailLink] EL
LEFT OUTER JOIN SitePages P ON P.ID = EL.PID
LEFT OUTER JOIN Stats S ON S.URL = EL.URL AND S.SOURCEID = EL.EMAILID AND S.SOURCETYPEID = 1
LEFT OUTER JOIN (SELECT PageId , COUNT(1) as TransactionCount,Min(PageURL) as PageURL FROM @TransactionsStats GROUP BY PageId) AS T ON T.PageId = EL.PID or T.PageURL like EL.URL+'%'
WHERE EL.EMAILID = @EmailID AND EL.[URL] IS NOT NULL
GROUP BY EL.[ID], EL.[EmailID], EL.[PID], PageName, EL.[URL], EL.[DocumentID],T.TransactionCount
UNION
SELECT EL.[ID]
, EL.[EmailID]
, EL.[PID]
, P.PageName
, EL.[URL]
, COUNT(S.statsid) hits
, COUNT(DISTINCT S.emailjobrecipientid) visitors
, EL.[DocumentID]
, ISNULL(T.transactionCount,0) as TransactionCount
FROM [EmailLink] EL
LEFT OUTER JOIN SitePages P ON P.ID = EL.PID
LEFT OUTER JOIN Stats S ON S.DocumentId = EL.DocumentID AND S.sourceid = EL.emailid AND S.sourcetypeid = 0
LEFT OUTER JOIN (SELECT PageId , COUNT(1) as TransactionCount,Min(PageURL) as PageURL FROM @TransactionsStats GROUP BY PageId) AS T ON T.PageId = EL.PID or T.PageURL like EL.URL+'%'
WHERE EL.EmailID = @EmailID and EL.[DocumentID] IS NOT NULL
GROUP BY EL.[ID], EL.[EmailID], EL.[PID], PageName, EL.[URL], EL.[DocumentID],T.TransactionCount
SELECT @TotalEmailLinks = SUM(Visitors),@TotalTransactions = SUM(TransactionCount) FROM @EmailLinksStatsTable
IF @TotalEmailLinks IS NOT NULL AND @TotalEmailLinks > 0 BEGIN
Select DISTINCT
ET.ID
, ET.EmailID
, ET.PID
, ET.PageName
, CASE WHEN EJ.Status = 7 THEN ET.Hits ELSE 0 END AS Hits
, ET.URL
, CASE WHEN EJ.Status = 7 THEN ET.Visitors ELSE 0 END AS Visitors
, ET.[DocumentID]
, CASE WHEN EJ.Status = 7 THEN CONVERT(DECIMAL(10,2) ,ROUND((et.Visitors*100.0)/ @TotalEmailLinks, 2)) ELSE 0.00 END AS ClickPercentage
, TransactionCount
, CASE WHEN @TotalTransactions <=0 THEN 0 ELSE CONVERT(DECIMAL(10,2) ,ROUND((ET.TransactionCount*100.0)/ @TotalTransactions, 2)) END AS TransactionPercentage
FROM @EmailLinksStatsTable ET
INNER JOIN EmailJob EJ
ON ET.EmailID = EJ.EmailID
END
ELSE BEGIN
SELECT DISTINCT
ET.ID
, ET.EmailID
, ET.PID
, ET.PageName
, CASE WHEN EJ.Status = 7 THEN ET.Hits ELSE 0 END AS Hits
, ET.URL
, CASE WHEN EJ.Status = 7 THEN ET.Visitors ELSE 0 END AS Visitors
, ET.[DocumentID]
, CONVERT(decimal(10,2) ,0.00) ClickPercentage
,TransactionCount
,CASE WHEN @TotalTransactions <=0 THEN 0 ELSE CONVERT(DECIMAL(10,2) ,ROUND((ET.TransactionCount*100.0)/ @TotalTransactions, 2)) END AS TransactionPercentage
FROM @EmailLinksStatsTable ET
INNER JOIN EmailJob EJ
ON ET.EmailID = EJ.EmailID
END
END