【发布时间】:2022-01-24 00:14:21
【问题描述】:
我有一张表,我希望使用以下更新命令将isExcluded = 1 设置为PhoneID 和PhoneName 不重复的所有行以及ID 没有最小的所有行如果这些行没有重复的PhoneID 和PhoneName,则来自选定PhoneID 的编号(即:由于所有带有PhoneID = 2 的行都不重复,因此包含PhoneName = b 的行具有最小的ID,因为它是@ 987654332@。因此,所有带有PhoneID = 2 和ID > 3 的行都将其IsExcluded 设置为1。
| ID | PhoneID | PhoneName | isExcluded |
|---|---|---|---|
| 1 | 1 | a | 0 |
| 2 | 1 | a | 0 |
| 3 | 2 | b | 0 |
| 4 | 2 | c | 0 |
| 5 | 2 | d | 0 |
| 6 | 2 | e | 0 |
| 7 | 3 | c | 0 |
| 8 | 3 | c | 0 |
| 9 | 3 | d | 0 |
| 10 | 3 | d | 0 |
这是我编写的 SQL 脚本。它似乎只得到非重复项。
WITH Duplicates AS
(
SELECT
ID, PhoneID, PhoneName, isExcluded,
(ROW_NUMBER() OVER (PARTITION BY PhoneName, PhoneID ORDER BY ID)) AS RowNum
FROM
Phones
)
UPDATE Phones
SET isExcluded = 1
FROM Duplicates d
WHERE (
d.PhoneID = Phones.PhoneID
AND d.PhoneName = Phones.PhoneName
AND d.RowNum =< 1);
SELECT * FROM Phones;
这个表应该是我的命令的结果。
| ID | PhoneID | PhoneName | isExcluded |
|---|---|---|---|
| 1 | 1 | a | 0 |
| 2 | 1 | a | 0 |
| 3 | 2 | b | 0 |
| 4 | 2 | c | 1 |
| 5 | 2 | d | 1 |
| 6 | 2 | e | 1 |
| 7 | 3 | c | 0 |
| 8 | 3 | c | 0 |
| 9 | 3 | d | 1 |
| 10 | 3 | d | 1 |
【问题讨论】:
标签: sql sql-server tsql