【发布时间】:2017-01-02 12:32:58
【问题描述】:
我有一张表,其中包含一组重复记录,用于输入 ID。我的要求是更新所有记录的日期列并将其设置为 getdate(),但对于重复项(原始记录)中的前 1 个记录,我必须将日期列设置为空。
我使用 cte 和 update 语句,但它们正在更新表中的所有记录,但我需要将前 1 条记录的日期列设置为空。
;WITH CTE_Duplicate (application_ID, CW_Deferred_ID, DuplicateCount)
AS (
SELECT application_ID, CW_Deferred_ID,Row_number()
OVER ( PARTITION BY application_ID, CW_Deferred_ID ORDER BY application_ID) AS DuplicateCount
FROM dbo.Application_Refinance)
UPDATE dbo.Application_Refinance
SET Inactive_Date = GETDATE()
, Update_User = '13617'
,Update_Date = GETDATE()
FROM CTE_Duplicate
WHERE DuplicateCount > 1 and inactive_date is NULL
我需要添加一些条件,以便对于所有重复记录,更新语句将日期设置为 getdate,而对于前 1 条记录,我需要设置为空。
;WITH CTE_Duplicate (application_ID, CW_Deferred_ID, RowNumber)
AS (
SELECT application_ID, CW_Deferred_ID,Row_number()
OVER ( PARTITION BY application_ID, CW_Deferred_ID, CTE_Duplicate.RowNumber ORDER BY application_ID) AS Duplicate
FROM dbo.Application_Refinance)
UPDATE dbo.Application_Refinance
SET Inactive_Date = CASE WHEN CTE_Duplicate.RowNumber = 1
THEN NULL
else GETDATE()
end
, Update_User = '13617'
,Update_Date = GETDATE()
FROM CTE_Duplicate
WHERE CTE_Duplicate.RowNumber > 1
当我尝试这个时,我得到了这个错误
无法绑定多部分标识符“CTE_Duplicate.RowNumber”。
当我只运行选择部分时..
SELECT application_ID, CW_Deferred_ID, Inactive_date, Update_date, Update_user
,Row_number() OVER ( PARTITION BY application_ID, CW_Deferred_ID ORDER BY application_ID) AS RowNum
FROM dbo.Application_Refinance
ID:112979 XXX:753-0514763 非活动日期:2016-12-29 12:22:54.533 更新日期:2016-12-29 12:22:54.533 行数:1
ID:112979
XXX:753-0514763
非活动日期:2016-12-29 12:22:54.533
更新日期:2016-12-29 12:22:54.533
行号:2
ID:112979
XXX:753-0514763
非活动日期:2016-12-29 12:22:54.533
更新日期:2016-12-29 12:22:54.533
行号:3
现在我想将 row= 1 设置为 Null 并将 row = 2 和 row=3 等设置为 getdate() 其中 id 的行数 >1
【问题讨论】:
标签: sql sql-server date sql-update