所以我需要复制检查一个复杂的对象,然后从所有关联的表级联删除dupes,我想知道我是否可以在SQL Server中有效地执行它,或者我是否应该在我的代码中执行它。在结构上我有以下表格。
如果声明在8个字段中匹配并且在所有映射表中具有相同的关系,则声明基本上是重复的。
例如,以下记录将显示为重复
Claim
Id CreateDate Other Fields
1 1/1/2015 matched
2 6/1/2015 matched
ClaimCaseSubTypes
ClaimId SubTypeId
1 34
1 64
2 34
2 64
ClaimDiagnosticCodes
ClaimId DiagnosticCodeId
1 1
2 1
ClaimTreatmentCodes
ClaimId TreatmentCodeId
1 5
1 6
2 6
2 5
在这种情况下,我想保留1并从Claim表中删除2以及ClaimId为2的映射表中的任何行
答案 0 :(得分:3)
这是窗函数的用途:
;WITH cte AS (
SELECT c.ID,
ROW_NUMBER() OVER (PARTITION BY field1, field2, field3, ... ORDER BY c.CreateDate) As ClaimOrder
FROM Claim c
INNER JOIN other tables...
)
UPDATE Claim
SET IsDuplicate = IIF(cte.ClaimOrder = 1, 0, 1)
FROM Claim c
INNER JOIN cte ON c.ID = cte.ID
PARTITION BY
中包含的字段表示哪两个字段需要相同,才能将两个声明视为匹配。 ORDER BY
告诉SQL Server将最早的声明分配为1.顺序为1的所有内容都与其他内容重复。