删除SQL Server管理器中每个帐户的重复编号NO

问题描述 投票:0回答:1

我有一个称为CAL的表(该表包含每个客户帐户的注释)。在某个时候,导入过程每个acct_no添加了265个重复注释,在这里我需要删除每个acct_no除外的所有注释。

我能够拉出查询以找到重复项,但不知道如何删除每个acct_No的重复项,而每个acct_no至少保留1条记录

SELECT ACCT_NO, [TYPE], DATE_ADDED, TIME_ADDED, ADDED_BY, NOTES, COUNT(*)
FROM PLSHARED.DBO.CAL
GROUP BY ACCT_NO, [TYPE], DATE_ADDED, TIME_ADDED, ADDED_BY, NOTES
HAVING COUNT(*) > 10
ORDER BY ACCT_NO

示例结果是:ACCT_NO TYPE TIME_ADDED ADDED_BY NOTES COUNT100224〜APPAACOLC 2019-04-23 11:35:00 APPAA电话:6463736300结果:左消息265100299〜APPAACOLC 2019-04-23 11:36:00 APPAA电话:6462793975结果:应答265100361〜APPAACOLC 2019-04-23 11:35:00 APPAA电话:9178863391结果:应答265100630〜APPAACOLC 2019-04-23 11:36:00 APPAA电话:5164663631结果:左消息电话:5166623996结果:答复265101546〜APPAACOLC 2019-04-23 11:37:00 APPAA电话:5163651466结果:应答265101809〜APPAACOLC 2019-04-23 11:37:00 APPAA电话:9176985008结果:应答265102239〜APPAACOLC 2019-04-23 11:37:00 APPAA电话:9174406128结果:左消息265

duplicates sql-delete
1个回答
0
投票

弄清楚了,这里是正确的代码:

WITH Duplicates_CTE(ACCT_NO, [TYPE], DATE_ADDED, TIME_ADDED, ADDED_BY, NOTES, U_INVNO, recno)
AS
(
 SELECT ACCT_NO, [TYPE], DATE_ADDED, TIME_ADDED, ADDED_BY, NOTES, U_INVNO,Min(recno) recno
 FROM PLSHARED.DBO.cal
 GROUP BY ACCT_NO, [TYPE], DATE_ADDED, TIME_ADDED, ADDED_BY, NOTES,U_INVNO
 HAVING Count(*) > 3)

DELETE FROM PLSHARED.DBO.cal
WHERE recno IN (
 SELECT cal.recno
 FROM PLSHARED.DBO.cal
 INNER JOIN Duplicates_CTE
 ON cal.ACCT_NO = Duplicates_CTE.ACCT_NO
 and cal.[TYPE] = Duplicates_CTE.[TYPE]
 and cal.DATE_ADDED = Duplicates_CTE.DATE_ADDED
 and cal.TIME_ADDED = Duplicates_CTE.TIME_ADDED
 and cal.ADDED_BY = Duplicates_CTE.ADDED_BY
 and cal.NOTES = Duplicates_CTE.NOTES
 and cal.U_INVNO = Duplicates_CTE.U_INVNO
 AND cal.recno <> Duplicates_CTE.recno
)
© www.soinside.com 2019 - 2024. All rights reserved.