【发布时间】:2021-12-02 17:26:47
【问题描述】:
我想要做的是为表Customers 中的所有重复项设置列Deleted = 1,除了一个。所以只剩下一个条目。
表:
| Deleted | ID | Number | Name |
-----------------------------------
| 0 | 2A3E | 100004 | Andy |
| 0 | 9P3W | 102506 | Judy |
| 0 | 3R4Z | 120097 | Freddy|
| 0 | 1G5Y | 103905 | Nikky |
| 0 | 2A3E | 103905 | Nikky |
| 0 | 9P3W | 147001 | Johnny|
| 0 | 5K7V | 120097 | Teddy |
| 0 | 6D8S | 120097 | Teddy |
查询:
WITH DataSource AS
(
SELECT *,
COUNT(*) OVER (PARTITION BY Number) count_calc
FROM Customers
)
SELECT *
FROM DataSource
WHERE count_calc > 1
结果:
| Deleted | ID | Number | Name |
-----------------------------------
| 0 | 1G5Y | 103905 | Nikky |
| 0 | 2A3E | 103905 | Nikky |
| 0 | 5K7V | 120097 | Teddy |
| 0 | 6D8S | 120097 | Teddy |
现在我想为一只 Nikky 和一只 Teddy 设置 Deleted = 1。
尝试了DISTINCT 和GROUP BY,但没有成功。如何修改查询,使其仅返回 Nikky 和 Teddy 的这些重复项之一,而不是两者?但同时返回所有列,以便我可以将 Deleted 的一设置为 1?
【问题讨论】:
标签: sql-server count duplicates common-table-expression