我有一个表,其中可以使用订单和项目的串联来标识唯一的记录,如下所示:
ORDER | ITEM |
---|---|
1234 | 001 |
1234 | 002 |
1235 | 001 |
1235 | 002 |
1235 | 003 |
1236 | 001 |
1237 | 001 |
... | ... |
该表当前具有每个唯一组合的副本,如下所示:
ORDER | ITEM |
---|---|
1234 | 001 |
1234 | 002 |
1235 | 001 |
1235 | 002 |
1235 | 003 |
1236 | 001 |
1237 | 001 |
1234 | 001 |
1234 | 002 |
1235 | 001 |
1235 | 002 |
1235 | 003 |
1236 | 001 |
1237 | 001 |
... | ... |
我使用以下子查询来 Select 所有重复的行:
SELECT * FROM (
SELECT order + item AS ID,
Row_Number() OVER(PARTITION BY order, item ORDER BY order) as CN
FROM [schema].[table]
)
AS Q WHERE Q.CN > 1
结果是:
ID | CN |
---|---|
1234001 | 2 |
1234001 | 3 |
1234001 | 4 |
1234002 | 2 |
1234002 | 3 |
1234002 | 4 |
1235001 | 2 |
1235001 | 3 |
1235001 | 4 |
... | ... |
如果这是一个非常简单的问题,请原谅,但是有没有一个简单的修改来将上面的子查询变成一个DELETE语句,并删除它当前 Select 的每条记录(例如,使用CN&>1)?