如果唯一确定唯一性的是列电子邮件(如您的示例所建议的那样),那么试试这个:
Update t set active= 0
From Table t
Where id !=
(Select Min(id) From table
Where email = t.email)
如果还应使用其他列来确定唯一性,则将这些列包含在子查询 where 子句中:
Update t set active= 0
From Table t
Where id !=
(Select Min(id) From table
Where email = t.email
And addr = t.addr
And [Other columns])
要处理您的评论中的问题,如果有空白字段,并且您想从多行中收集数据,那么您遇到的问题要复杂得多。首先,值可能不止一行,然后某些行的值可能与其他行不同。其次,如果您只想在填充它们时将它们包含在唯一性测试中(对于重复项),那么当某些行具有相同的三列并且一组不同的行具有不同的列集时,您会做什么相同的价值观?
id addr city state zip phone
1 X Denver CO 71113 Blank
2 Y Blank CO Blank 212.901-3456
3 X Denver TX Blank Blank
4 Y ElPaso TX Blank 212.901-3456
5 X ElPaso Blank 71113 Blank
6 Y ElPaso Blank Blank 212.901-3456
那么你如何决定哪些行是重复的?这太复杂了,无法处理。如果您可以选择一组固定的列来确定唯一性/重复项,那么有一种方法可以从您正在停用的其他多行之一收集其他列的数据值,当您离开时active 有一个空白值,但如果用于确定唯一性/重复的列可能不同(取决于实际数据值),那么这些技术将不起作用。