The purpose of this stored procedure is to merge dbo.receipts (new receipts), tblStoreData (historical data), and source_mealconnect tables into receipts_vw table (converted from view – necessary for speed).
Once the merge is completed, clean-up steps are run:
Pre-step remove all records within last 6 months where [comment] = ‘Missing Contributor id record for YearMonth’
- For last 6 months, get contributor, year month, and a count from existing data
- Get all contributors from mappings.fresh_alliance_localization_tracker
and cross-join year month for last 6 months with 0 as rowCnt - Union items a and b (above)
- roll up rowcounts and then any with a 0 (zero) rowcnt is left
- align fields
- insert into staging.contributor_vw

SQL Code:
-- =======================================================
-- Create Stored Procedure Template for Azure SQL Database
-- =======================================================
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE staging.update_receipt_vw
/*
Created By John Horton LogicIntelligence
Created On 11/15/2024
Purpose Union/Append tables dbo.receipt, [raw_freshalliance].[ms_access_tblStoreData] - with referencecode (receiptRef) as null
, [staging].[source_mealconnect]. Then we replace Agency for NULL or 0 values with data from [mappings].[P2_Receipt_Warehouse_to_AgencyId_Mapping]
for warehouseId's
Updated on 12/19/2024
Purpose to optimize, changed from view to stored procedure
only updating last 6 months of data
*/
AS
BEGIN
DECLARE @MyTableVar TABLE (
[Action] varchar(50)
,receiptid BIGINT
,DataSourceid int
);
MERGE staging.receipt_vw as tgt
USING (
SELECT [receiptId]
,[referenceCode]
,[contributorId]
,[contributorAddressId]
,[contributorContactId]
,[warehouseId]
,[systemEntryOriginId]
,[donationTypeId]
,[systemReceiptTypeId]
,[isDelivery]
,[originationId]
,[originCity]
,[comment]
,[pickupDate]
,[approved]
,[isRetailPickup]
,[isFoodDrive]
,[confirmedDate]
,[submissionDate]
,[modifiedOn]
,[inactiveOn]
,[isInactive]
,[isConfirmed]
,[systemReceivedDate]
,[systemReceived]
,[agencyId]
,[donorInvoiceDate]
,[isBeingConfirmed]
,[confirmingStart]
,[confirmingEnd]
,[isBeingConvertedToOrder]
,[convertingToOrderStart]
,[convertingToOrderEnd]
,[dataSourceId]
,[RowCreateDateTime]
FROM [dbo].[receipt]
) as src
ON tgt.receiptid = src.receiptid
WHEN MATCHED AND src.[modifiedOn] >= dateadd(month,-3,GetDate())
THEN
UPDATE
SET [referenceCode] = src.[referenceCode]
,[contributorId] = src.[contributorId]
,[contributorAddressId] = src.[contributorAddressId]
,[contributorContactId] = src.[contributorContactId]
,[warehouseId] = src.[warehouseId]
,[systemEntryOriginId] = src.[systemEntryOriginId]
,[donationTypeId] = src.[donationTypeId]
,[systemReceiptTypeId] = src.[systemReceiptTypeId]
,[isDelivery] = src.[isDelivery]
,[originationId] = src.[originationId]
,[originCity] = src.[originCity]
,[comment] = src.[comment]
,[pickupDate] = src.[pickupDate]
,[approved] = src.[approved]
,[isRetailPickup] = src.[isRetailPickup]
,[isFoodDrive] = src.[isFoodDrive]
,[confirmedDate] = src.[confirmedDate]
,[submissionDate] = src.[submissionDate]
,[modifiedOn] = src.[modifiedOn]
,[inactiveOn] = src.[inactiveOn]
,[isInactive] = src.[isInactive]
,[isConfirmed] = src.[isConfirmed]
,[systemReceivedDate] = src.[systemReceivedDate]
,[systemReceived] = src.[systemReceived]
,[agencyId] = src.[agencyId]
,[donorInvoiceDate] = src.[donorInvoiceDate]
,[isBeingConfirmed] = src.[isBeingConfirmed]
,[confirmingStart] = src.[confirmingStart]
,[confirmingEnd] = src.[confirmingEnd]
,[isBeingConvertedToOrder] = src.[isBeingConvertedToOrder]
,[convertingToOrderStart] = src.[convertingToOrderStart]
,[convertingToOrderEnd] = src.[convertingToOrderEnd]
,[dataSourceId] = src.[dataSourceId]
,[RowCreateDateTime] = src.[RowCreateDateTime]
WHEN NOT MATCHED
THEN
INSERT
(
[receiptId]
,[referenceCode]
,[contributorId]
,[contributorAddressId]
,[contributorContactId]
,[warehouseId]
,[systemEntryOriginId]
,[donationTypeId]
,[systemReceiptTypeId]
,[isDelivery]
,[originationId]
,[originCity]
,[comment]
,[pickupDate]
,[approved]
,[isRetailPickup]
,[isFoodDrive]
,[confirmedDate]
,[submissionDate]
,[modifiedOn]
,[inactiveOn]
,[isInactive]
,[isConfirmed]
,[systemReceivedDate]
,[systemReceived]
,[agencyId]
,[donorInvoiceDate]
,[isBeingConfirmed]
,[confirmingStart]
,[confirmingEnd]
,[isBeingConvertedToOrder]
,[convertingToOrderStart]
,[convertingToOrderEnd]
,[dataSourceId]
,[RowCreateDateTime]
)
VALUES
(src.[receiptId]
, src.[referenceCode]
, src.[contributorId]
, src.[contributorAddressId]
, src.[contributorContactId]
, src.[warehouseId]
, src.[systemEntryOriginId]
, src.[donationTypeId]
, src.[systemReceiptTypeId]
, src.[isDelivery]
, src.[originationId]
, src.[originCity]
, src.[comment]
, src.[pickupDate]
, src.[approved]
, src.[isRetailPickup]
, src.[isFoodDrive]
, src.[confirmedDate]
, src.[submissionDate]
, src.[modifiedOn]
, src.[inactiveOn]
, src.[isInactive]
, src.[isConfirmed]
, src.[systemReceivedDate]
, src.[systemReceived]
, src.[agencyId]
, src.[donorInvoiceDate]
, src.[isBeingConfirmed]
, src.[confirmingStart]
, src.[confirmingEnd]
, src.[isBeingConvertedToOrder]
, src.[convertingToOrderStart]
, src.[convertingToOrderEnd]
, src.[dataSourceId]
, src.[RowCreateDateTime]
)
OUTPUT
$action as outputType
,inserted.receiptid
,inserted.DataSourceid
INTO @MyTableVar
;
-- [raw_freshalliance].[ms_access_tblStoreData] - Just adding new id's
MERGE staging.receipt_vw as tgt
USING (
SELECT tsd.[UniqueID] as [receiptId]
,COALESCE([ReceiptRef],'Unknown') as [referenceCode]
,COALESCE(cvw.contributorId,0) as [contributorId]
,COALESCE(cvw.[mainAddressId],0) as [contributorAddressId]
,COALESCE(cvw.[mainContactId],0) as [contributorContactId]
,0 as [warehouseId]
,0 as [systemEntryOriginId]
,COALESCE(cvw.[defaultdonationTypeId],0) as [donationTypeId]
,0 as [systemReceiptTypeId]
,0 as [isDelivery]
,COALESCE(cvw.[defaultoriginationId],0) as [originationId]
,NULL as [originCity]
,NULL as [comment]
,tsd.[pickupDate]
,1 as [approved]
,COALESCE(cvw.[isRetailPickup],0) as [isRetailPickup]
,COALESCE(cvw.[isFoodDrive],0) as [isFoodDrive]
,NULL as [confirmedDate]
,NULL as [submissionDate]
,NULL as [modifiedOn]
,NULL as [inactiveOn]
,COALESCE(cvw.[isInactive],1) as [isInactive]
,1 as [isConfirmed]
,NULL as [systemReceivedDate]
,NULL as [systemReceived]
,a.agencyid as [agencyId]
,NULL as [donorInvoiceDate]
,0 as [isBeingConfirmed]
,NULL as [confirmingStart]
,NULL as [confirmingEnd]
,0 as [isBeingConvertedToOrder]
,NULL as [convertingToOrderStart]
,NULL as [convertingToOrderEnd]
,6 as [dataSourceId]
,GetDate() as [RowCreateDateTime]
FROM [raw_freshalliance].[ms_access_tblStoreData] tsd
LEFT OUTER JOIN staging.contributor_vw cvw
ON tsd.DonorRef = cvw.referenceCode
LEFT OUTER JOIN dbo.agency a
ON tsd.AgencyRef = a.referenceCode
LEFT OUTER JOIN dbo.receipt r
ON r.receiptId = tsd.UniqueID
WHERE tsd.ReceiptRef is NULL
AND cvw.referenceCode IS NOT NULL
AND r.receiptId IS NULL
) as src
ON tgt.receiptid = src.receiptid
WHEN NOT MATCHED
THEN
INSERT
(
[receiptId]
,[referenceCode]
,[contributorId]
,[contributorAddressId]
,[contributorContactId]
,[warehouseId]
,[systemEntryOriginId]
,[donationTypeId]
,[systemReceiptTypeId]
,[isDelivery]
,[originationId]
,[originCity]
,[comment]
,[pickupDate]
,[approved]
,[isRetailPickup]
,[isFoodDrive]
,[confirmedDate]
,[submissionDate]
,[modifiedOn]
,[inactiveOn]
,[isInactive]
,[isConfirmed]
,[systemReceivedDate]
,[systemReceived]
,[agencyId]
,[donorInvoiceDate]
,[isBeingConfirmed]
,[confirmingStart]
,[confirmingEnd]
,[isBeingConvertedToOrder]
,[convertingToOrderStart]
,[convertingToOrderEnd]
,[dataSourceId]
,[RowCreateDateTime]
)
VALUES
(src.[receiptId]
, src.[referenceCode]
, src.[contributorId]
, src.[contributorAddressId]
, src.[contributorContactId]
, src.[warehouseId]
, src.[systemEntryOriginId]
, src.[donationTypeId]
, src.[systemReceiptTypeId]
, src.[isDelivery]
, src.[originationId]
, src.[originCity]
, src.[comment]
, src.[pickupDate]
, src.[approved]
, src.[isRetailPickup]
, src.[isFoodDrive]
, src.[confirmedDate]
, src.[submissionDate]
, src.[modifiedOn]
, src.[inactiveOn]
, src.[isInactive]
, src.[isConfirmed]
, src.[systemReceivedDate]
, src.[systemReceived]
, src.[agencyId]
, src.[donorInvoiceDate]
, src.[isBeingConfirmed]
, src.[confirmingStart]
, src.[confirmingEnd]
, src.[isBeingConvertedToOrder]
, src.[convertingToOrderStart]
, src.[convertingToOrderEnd]
, src.[dataSourceId]
, src.[RowCreateDateTime]
)
OUTPUT
$action as outputType
,inserted.receiptid
,inserted.DataSourceid
INTO @MyTableVar
;
-- [staging].[source_mealconnect]
MERGE staging.receipt_vw as tgt
USING (
SELECT CAST(CONCAT('99',mc.id,mc.itemId) as bigint) as [receiptId]
,'Unknown' as [referenceCode]
,COALESCE(cvw.contributorId,0) as [contributorId]
,COALESCE(cvw.[mainAddressId],0) as [contributorAddressId]
,COALESCE(cvw.[mainContactId],0) as [contributorContactId]
,0 as [warehouseId]
,0 as [systemEntryOriginId]
,COALESCE(cvw.[defaultdonationTypeId],0) as [donationTypeId]
,0 as [systemReceiptTypeId]
,0 as [isDelivery]
,COALESCE(cvw.[defaultoriginationId],0) as [originationId]
,NULL as [originCity]
,NULL as [comment]
,mc.postingDate as [pickupDate]
,1 as [approved]
,COALESCE(cvw.[isRetailPickup],0) as [isRetailPickup]
,COALESCE(cvw.[isFoodDrive],0) as [isFoodDrive]
,NULL as [confirmedDate]
,NULL as [submissionDate]
,NULL as [modifiedOn]
,NULL as [inactiveOn]
,COALESCE(cvw.[isInactive],1) as [isInactive]
,1 as [isConfirmed]
,NULL as [systemReceivedDate]
,NULL as [systemReceived]
,a.agencyid as [agencyId]
,NULL as [donorInvoiceDate]
,0 as [isBeingConfirmed]
,NULL as [confirmingStart]
,NULL as [confirmingEnd]
,0 as [isBeingConvertedToOrder]
,NULL as [convertingToOrderStart]
,NULL as [convertingToOrderEnd]
,7 as [dataSourceId]
,mc.postingDate as [RowCreateDateTime]
FROM (
SELECT DISTINCT *
FROM [staging].[source_mealconnect]
) mc
LEFT OUTER JOIN staging.contributor_vw cvw
ON mc.donorCode = cvw.referenceCode
LEFT OUTER JOIN dbo.agency a
ON mc.agencyCode = a.referenceCode
WHERE cvw.referenceCode IS NOT NULL
) as src
ON tgt.receiptid = src.receiptid
WHEN MATCHED AND src.[PickupDate] >= dateadd(month,-3,GetDate()) AND tgt.datasourceid = src.datasourceid
THEN
UPDATE
SET [referenceCode] = src.[referenceCode]
,[contributorId] = src.[contributorId]
,[contributorAddressId] = src.[contributorAddressId]
,[contributorContactId] = src.[contributorContactId]
,[warehouseId] = src.[warehouseId]
,[systemEntryOriginId] = src.[systemEntryOriginId]
,[donationTypeId] = src.[donationTypeId]
,[systemReceiptTypeId] = src.[systemReceiptTypeId]
,[isDelivery] = src.[isDelivery]
,[originationId] = src.[originationId]
,[originCity] = src.[originCity]
,[comment] = src.[comment]
,[pickupDate] = src.[pickupDate]
,[approved] = src.[approved]
,[isRetailPickup] = src.[isRetailPickup]
,[isFoodDrive] = src.[isFoodDrive]
,[confirmedDate] = src.[confirmedDate]
,[submissionDate] = src.[submissionDate]
,[modifiedOn] = src.[modifiedOn]
,[inactiveOn] = src.[inactiveOn]
,[isInactive] = src.[isInactive]
,[isConfirmed] = src.[isConfirmed]
,[systemReceivedDate] = src.[systemReceivedDate]
,[systemReceived] = src.[systemReceived]
,[agencyId] = src.[agencyId]
,[donorInvoiceDate] = src.[donorInvoiceDate]
,[isBeingConfirmed] = src.[isBeingConfirmed]
,[confirmingStart] = src.[confirmingStart]
,[confirmingEnd] = src.[confirmingEnd]
,[isBeingConvertedToOrder] = src.[isBeingConvertedToOrder]
,[convertingToOrderStart] = src.[convertingToOrderStart]
,[convertingToOrderEnd] = src.[convertingToOrderEnd]
,[dataSourceId] = src.[dataSourceId]
,[RowCreateDateTime] = src.[RowCreateDateTime]
WHEN NOT MATCHED
THEN
INSERT
(
[receiptId]
,[referenceCode]
,[contributorId]
,[contributorAddressId]
,[contributorContactId]
,[warehouseId]
,[systemEntryOriginId]
,[donationTypeId]
,[systemReceiptTypeId]
,[isDelivery]
,[originationId]
,[originCity]
,[comment]
,[pickupDate]
,[approved]
,[isRetailPickup]
,[isFoodDrive]
,[confirmedDate]
,[submissionDate]
,[modifiedOn]
,[inactiveOn]
,[isInactive]
,[isConfirmed]
,[systemReceivedDate]
,[systemReceived]
,[agencyId]
,[donorInvoiceDate]
,[isBeingConfirmed]
,[confirmingStart]
,[confirmingEnd]
,[isBeingConvertedToOrder]
,[convertingToOrderStart]
,[convertingToOrderEnd]
,[dataSourceId]
,[RowCreateDateTime]
)
VALUES
(src.[receiptId]
, src.[referenceCode]
, src.[contributorId]
, src.[contributorAddressId]
, src.[contributorContactId]
, src.[warehouseId]
, src.[systemEntryOriginId]
, src.[donationTypeId]
, src.[systemReceiptTypeId]
, src.[isDelivery]
, src.[originationId]
, src.[originCity]
, src.[comment]
, src.[pickupDate]
, src.[approved]
, src.[isRetailPickup]
, src.[isFoodDrive]
, src.[confirmedDate]
, src.[submissionDate]
, src.[modifiedOn]
, src.[inactiveOn]
, src.[isInactive]
, src.[isConfirmed]
, src.[systemReceivedDate]
, src.[systemReceived]
, src.[agencyId]
, src.[donorInvoiceDate]
, src.[isBeingConfirmed]
, src.[confirmingStart]
, src.[confirmingEnd]
, src.[isBeingConvertedToOrder]
, src.[convertingToOrderStart]
, src.[convertingToOrderEnd]
, src.[dataSourceId]
, src.[RowCreateDateTime]
)
OUTPUT
$action as outputType
,inserted.receiptid
,inserted.DataSourceid
INTO @MyTableVar
;
/* Add Missing Contributor id record for each YearMonth
Pre-step remove all records within last 6 months where [comment] = 'Missing Contributor id record for YearMonth'
a) For last 6 months, get contributor, year month, and a count from existing data
b) Then, get all contributors from mappings.fresh_alliance_localization_tracker
and cross-join year month for last 6 months with 0 as rowCnt
c) Union a and b
d) roll up rowcounts and then any with a 0 (zero) rowcnt is left
e) align fields
f) insert into staging.contributor_vw
*/
DELETE rdvw
FROM staging.receiptDetail_vw rdvw
JOIN staging.receipt_vw rvw
ON rdvw.receiptid = rvw.receiptid
WHERE [comment] = 'Missing Contributor id record for YearMonth'
AND PickupDate >= DATEADD(Month,-6,GetDate())
DELETE
FROM staging.receipt_vw
WHERE [comment] = 'Missing Contributor id record for YearMonth'
AND PickupDate >= DATEADD(Month,-6,GetDate())
IF OBJECT_ID('tempdb..#Staging_receipt_vw') IS NOT NULL DROP TABLE #Staging_receipt_vw
;WITH contYearMonth as
(
SELECT
contributorid
,FORMAT(pickupDate,'yyyyMM') as pickupYearMonthNumber
,COUNT(ReceiptID) as rowCnt
FROM staging.receipt_vw rvw
WHERE pickupDate >= DATEADD(MONTH,-6,GETDATE())
GROUP BY
contributorid
,FORMAT(pickupDate,'yyyyMM')
), crossYearMonth as
(
SELECT DISTINCT
--lt.Donor_Ref
--,lt.Donor_Name
cvw.contributorid
,ym.YearMonth
,rowCnt = 0
FROM mappings.fresh_alliance_localization_tracker lt
LEFT OUTER JOIN staging.contributor_vw cvw
ON cvw.referenceCode = lt.Donor_Ref
CROSS JOIN
(
SELECT DISTINCT
FORMAT(pickupDate,'yyyyMM') YearMonth
FROM staging.receipt_vw rvw
WHERE pickupDate >= DATEADD(MONTH,-6,GETDATE())
) ym
), UnionALL as
(
SELECT * FROM contYearMonth
UNION ALL
SELECT * FROM crossYearMonth
)
, FindZerorecords as (
SELECT
contributorid
,pickupYearMonthNumber
,SUM(rowCnt) as rowCnt
FROM UnionALL
Group BY
contributorid
,pickupYearMonthNumber
HAVING
Sum(rowCnt) = 0
)
SELECT
try_CAST(Concat(fzr.pickupYearMonthNumber,fzr.contributorid) as bigint) as [receiptId]
,'Unknown' as [referenceCode]
,COALESCE(cvw.contributorId,0) as [contributorId]
,COALESCE(cvw.[mainAddressId],0) as [contributorAddressId]
,COALESCE(cvw.[mainContactId],0) as [contributorContactId]
,0 as [warehouseId]
,0 as [systemEntryOriginId]
,COALESCE(cvw.[defaultdonationTypeId],0) as [donationTypeId]
,0 as [systemReceiptTypeId]
,CAST(0 as bit) as [isDelivery]
,COALESCE(cvw.[defaultoriginationId],0) as [originationId]
,CAST(NULL as varchar(100)) as [originCity]
,'Missing Contributor id record for YearMonth' as [comment]
,DATEFROMPARTS(left(fzr.pickupYearMonthNumber,4),right(pickupYearMonthNumber,2),'01') as PickupDate
,CAST(0 as bit) as [approved]
,CAST(COALESCE(cvw.[isRetailPickup],0) as bit) as [isRetailPickup]
,CAST(COALESCE(cvw.[isFoodDrive],0) as bit) as [isFoodDrive]
,CAST(NULL as DATE) as [confirmedDate]
,DATEFROMPARTS(left(fzr.pickupYearMonthNumber,4),right(pickupYearMonthNumber,2),'01') as [submissionDate]
,CAST(NULL as DATE) as [modifiedOn]
,CAST(NULL as DATE)as [inactiveOn]
,CAST(COALESCE(cvw.[isInactive],1) as bit) as [isInactive]
,CAST(0 as bit) as [isConfirmed]
,CAST(NULL as DATE) as [systemReceivedDate]
,CAST(NULL as bit) as [systemReceived]
,CAST(NULL as int) as [agencyId]
,CAST(NULL as DATE) as [donorInvoiceDate]
,CAST(0 as bit) as [isBeingConfirmed]
,CAST(NULL as DATETIME) as [confirmingStart]
,CAST(NULL as DATETIME) as [confirmingEnd]
,CAST(0 as bit) as [isBeingConvertedToOrder]
,CAST(NULL as DATETIME) as [convertingToOrderStart]
,CAST(NULL as DATETIME) as [convertingToOrderEnd]
,CAST(0 as int) as [dataSourceId]
,GetDate() as [RowCreateDateTime]
INTO #Staging_receipt_vw --staging.receipt_vw
FROM FindZerorecords fzr
LEFT OUTER JOIN staging.contributor_vw cvw
ON fzr.contributorid = cvw.contributorid
WHERE fzr.contributorid IS NOT NULL
INSERT INTO staging.receipt_vw
(
[receiptId]
,[referenceCode]
,[contributorId]
,[contributorAddressId]
,[contributorContactId]
,[warehouseId]
,[systemEntryOriginId]
,[donationTypeId]
,[systemReceiptTypeId]
,[isDelivery]
,[originationId]
,[originCity]
,[comment]
,[pickupDate]
,[approved]
,[isRetailPickup]
,[isFoodDrive]
,[confirmedDate]
,[submissionDate]
,[modifiedOn]
,[inactiveOn]
,[isInactive]
,[isConfirmed]
,[systemReceivedDate]
,[systemReceived]
,[agencyId]
,[donorInvoiceDate]
,[isBeingConfirmed]
,[confirmingStart]
,[confirmingEnd]
,[isBeingConvertedToOrder]
,[convertingToOrderStart]
,[convertingToOrderEnd]
,[dataSourceId]
,[RowCreateDateTime]
)
SELECT
[receiptId]
,[referenceCode]
,[contributorId]
,[contributorAddressId]
,[contributorContactId]
,[warehouseId]
,[systemEntryOriginId]
,[donationTypeId]
,[systemReceiptTypeId]
,[isDelivery]
,[originationId]
,[originCity]
,[comment]
,[pickupDate]
,[approved]
,[isRetailPickup]
,[isFoodDrive]
,[confirmedDate]
,[submissionDate]
,[modifiedOn]
,[inactiveOn]
,[isInactive]
,[isConfirmed]
,[systemReceivedDate]
,[systemReceived]
,[agencyId]
,[donorInvoiceDate]
,[isBeingConfirmed]
,[confirmingStart]
,[confirmingEnd]
,[isBeingConvertedToOrder]
,[convertingToOrderStart]
,[convertingToOrderEnd]
,[dataSourceId]
,[RowCreateDateTime]
FROM #Staging_receipt_vw
INSERT INTO @MyTableVar
([Action],receiptid,DataSourceid)
SELECT
'INSERT' as outputType
,receiptid
,DataSourceid
FROM #Staging_receipt_vw
INSERT INTO [log].data_event
([origin], event_type, [description],run_id)
SELECT
ds.[name] as [origin]
,[Action] as event_type
,CONCAT(Count(*),' rows ',[action],'ED to staging.receipt_vw') as [description]
,NULL as [run_id]
FROM @MyTableVar mt
LEFT OUTER JOIN [dbo].[dataSource] ds
ON ds.dataSourceid = mt.dataSourceid
GROUP BY
ds.[name]
,[Action]
Exec [staging].[update_receiptDetail_vw]
IF OBJECT_ID('tempdb..#Test') IS NOT NULL DROP TABLE #Test
/* Mark PRE Receipt records with Duplicates and other issues*/
;WITH find_dups as
(
SELECT DISTINCT
agencyid
,contributorid
,pickupdate
,rank_basic = row_number() OVER(PARTITION BY rvw.agencyid, rvw.contributorid, rvw.pickupDate ORDER BY rvw.agencyid, rvw.contributorid, rvw.pickupDate)
FROM staging.receipt_vw rvw
LEFT OUTER JOIN [dbo].[systemReceiptType] srt
on rvw.systemReceiptTypeId = srt.systemReceiptTypeid
WHERE rvw.pickupDate >= DATEADD(MONTH,-6,GETDATE())
AND lower(srt.[name]) = 'prereceipt'
), get_distinct_dups as
(
SELECT
agencyid
,contributorid
,pickupdate
from find_dups
WHERE rank_basic > 1
), add_receiptid as
(
SELECT
rvw.receiptId
,rvw.agencyid
,rvw.contributorId
,rvw.pickupDate
FROM staging.receipt_vw rvw
--INNER JOIN get_distinct_dups ddup
-- ON rvw.agencyId = ddup.agencyId
-- AND rvw.contributorId = ddup.contributorId
-- AND rvw.pickupDate = ddup.pickupDate
LEFT OUTER JOIN [dbo].[systemReceiptType] srt
on rvw.systemReceiptTypeId = srt.systemReceiptTypeid
WHERE rvw.pickupDate >= DATEADD(MONTH,-6,GETDATE())
AND lower(srt.[name]) = 'prereceipt'
), Add_RDetails as
(
SELECT
ar.receiptId
,ar.agencyId
,ar.contributorId
,ar.pickupDate
,STRING_AGG(CAST(rdvw.productId as varchar(50)) ,', ') WITHIN GROUP(ORDER BY rdvw.productId ASC) as AggProductIDs
,SUM(rdvw.requestedWeight) as totalRequestedWeight
, rwTooLarge
FROM add_receiptid ar
LEFT JOIN (
SELECT
receiptid
,productid
,SUM(requestedWeight) as requestedWeight
,iif(sum(requestedWeight) > 1500,1,0) as rwTooLarge
FROM staging.receiptDetail_vw
GROUP BY
receiptid
,productid
) rdvw
ON ar.receiptId = rdvw.receiptId
WHERE rdvw.productId IS NOT NULL
GROUP BY
ar.receiptId
,ar.agencyId
,ar.contributorId
,ar.pickupDate
,rwTooLarge
), ranking as
(
SELECT
receiptid
,agencyid
,contributorid
,pickupDate
,AggProductIDs
,totalRequestedWeight
,GroupCount = DENSE_RANK() OVER(ORDER BY pickupDate, agencyid, contributorid)
,COUNT(*) OVER(PARTITION BY agencyid, contributorid, pickupDate) as dup_count
,ROW_NUMBER() OVER(PARTITION BY agencyid, contributorid, pickupDate ORDER BY receiptID ASC) as BasicDuplicateRow
,COUNT(*) OVER(PARTITION BY agencyid, contributorid, pickupDate, totalRequestedWeight) as NonProduct_dup_count
,ROW_NUMBER() OVER(PARTITION BY agencyid, contributorid, pickupDate, totalRequestedWeight ORDER BY receiptID ASC) as NonProductDuplicateRow
,COUNT(*) OVER(PARTITION BY agencyid, contributorid, pickupDate, AggProductIDs, totalRequestedWeight) as Fully_dup_count
,ROW_NUMBER() OVER(PARTITION BY agencyid, contributorid, pickupDate, AggProductIDs, totalRequestedWeight ORDER BY receiptID DESC) as FullyDuplicateRow
,COUNT(*) OVER(PARTITION BY agencyid, pickupDate, totalRequestedWeight) as nonContributorDuplicate
,COUNT(*) OVER(PARTITION BY agencyid, contributorid, totalRequestedWeight) as nonPickupDateDuplicate
,rwTooLarge
FROM Add_RDetails ard
)
SELECT
*
, CASE
WHEN totalRequestedWeight = 0 THEN 'Total Received Weight = 0; Color = Yellow'
WHEN rwTooLarge = 1 THEN 'Individual Product Received Weight > 1500; Color = Red'
WHEN dup_count = FullyDuplicateRow AND dup_count > 1 THEN 'Fully Duplicate Primary; Color = Green'
WHEN dup_count = Fully_dup_count AND FullyDuplicateRow < Fully_dup_count AND dup_count > 1 THEN 'Fully Duplicate Alternate; Color = Red'
WHEN dup_count = NonProduct_dup_count AND NonProduct_dup_count = NonProductDuplicateRow AND dup_count > 1 THEN 'Non Product Duplicate Primary; Color = Green'
WHEN dup_count = NonProduct_dup_count AND NonProduct_dup_count > NonProductDuplicateRow AND dup_count > 1 THEN 'Non Product Duplicate Alternate; Color = Red'
WHEN dup_count > 1 THEN 'Basic Duplicate; Color = Yellow'
WHEN nonContributorDuplicate > 1 THEN 'Non Contributor Duplicate; COLOR = Yellow'
WHEN nonPickupDateDuplicate > 1 THEN 'Non PickupDate Duplicate; Color = Yellow'
ELSE NULL
END as [Status]
, CASE WHEN dup_count > 1 AND TotalRequestedWeight > 0 THEN 1 ELSE 0 END as DUPS
INTO #Test
FROM ranking
ORDER BY
GroupCount
,agencyid
,contributorid
,pickupDate
,receiptid
,AggProductIDs
,totalRequestedWeight
SELECT [status], * FROM #TEST
ORDER BY
GroupCount
,agencyid
,contributorid
,pickupDate
,receiptid
,AggProductIDs
,totalRequestedWeight
-- Reset Status and Dups
UPDATE [staging].[receipt_vw]
SET [Status] = NULL
,Dups = 0
-- Update Status and Dups
UPDATE rvw
SET [Status] = T.[Status]
,Dups = T.DUPS
FROM [staging].[receipt_vw] rvw
INNER JOIN #Test T
ON rvw.receiptId = T.receiptId
END
GO
