请教各位高手,先多谢了。有数据如下:
id code name
1 A NULL
2 A 半夏
3 B 半夏
4 B 忍冬
5 C 忍冬
6 D 素问
code 非空,name 有空值。
需根据code、name字段查重。只要有一个字段相同即为重复:
如id为1、2时: code重复;id为2、3时,name重复,因此1、2、3行重复。
如上数据,则第1至第5条记录重复。
要求找出重复值,将其对应id改为max(id),记为newid,并插入源数据表。
结果如下所示:
id newid code name
1 5 A NULL
2 5 A 半夏
3 5 B 半夏
4 5 B 忍冬
5 5 C 忍冬
6 6 D 素问
id code name
1 A NULL
2 A 半夏
3 B 半夏
4 B 忍冬
5 C 忍冬
6 D 素问
code 非空,name 有空值。
需根据code、name字段查重。只要有一个字段相同即为重复:
如id为1、2时: code重复;id为2、3时,name重复,因此1、2、3行重复。
如上数据,则第1至第5条记录重复。
要求找出重复值,将其对应id改为max(id),记为newid,并插入源数据表。
结果如下所示:
id newid code name
1 5 A NULL
2 5 A 半夏
3 5 B 半夏
4 5 B 忍冬
5 5 C 忍冬
6 6 D 素问
即将有重复的记录的newid改为重复记录中最大的id即可
可是如何找出重复值?
假设知道前5条记录重复,怎么写update语句?
1 A NULL
2 B 半夏
3 B 忍冬
4 C 忍冬
5 D 素问
6 A 半夏
再看code字段,2和3行重复,name字段3和4行重复,所以2、3、4行重复
由上,1、2、3、4、6行重复。
结果为:
id newid code name
1 6 A NULL
2 6 B 半夏
3 6 B 忍冬
4 6 C 忍冬
5 5 D 素问
6 6 A 半夏
可是如何找出重复值?
假设知道前5条记录重复,怎么写update语句?--先更新newid等于id
update tb set newid=id--然后更新重复的newid
update t1 set t1.newid=t2.MaxId
from tb t1 inner join (select id,max(id) Maxid from tb t3 where exists(select 1 from tb t4 where t4.id=t3.id group by t4.code haveing count(*)>1) or exists(select 1 from tb t5 where t5.id=t3.id group by t5.[name] haveing count(*)>1))) t2 on t1.id=t2.id