请懂sql server的老师进来看下,求助一语句

来源:百度知道 编辑:UC知道 时间:2024/09/22 12:35:51
有这样一个情况,需要编写一个语句来处理,例:表中内容如下:00001 1000270025 00001 10027026 00002 100270026 00003 100270026 00003 10027028 00003 100270029

我想把所有不是00001的字段更新成 00001的字段,应通过什么语句来完成!用Update 直接改的话就很显然有重复的,我就想知道,应加什么条件进行限制。谢谢大家!
表中只有2个字段! 且表中字段是不允许重复的!

表:table

id num

00001 1000270025
00001 10027026
00002 100270026
00003 100270026
00003 10027028
00003 100270029

你的意思是只有两个字段,如以上效果不?
如果这样,现假设这两个字段名分别为 id与num。更新的sql语法如下:
undate [table] set id='00001' where id <> '00001'

如果按这样更新后就有重复的内容了! 我要的结果就是要这样的结果:

00001 1000270025
00001 100270026
00002 100270026
00003 100270026
00003 100270028
00001 100270028
00003 100270029
00001 100270029
就是没有00001的话,都加上00001的字段,而且不允许重复

有高手写了一个语句,大家帮忙看下是不是这样?

设表名为table01,字段为f1,f2:

insert into table01

你的意思是数据库里每一个num都有一个ID值为00001对应,没的话添加一条?
insert into table01(id,num)
select '00001',t1.num from (select distinct(num) from table01) t1
left join table01 t2 on t2.num=t1.num and ID='00001'
where isnull(t2.ID,'')=''
我测了下,应该没问题

表:table

id num

00001 1000270025
00001 10027026
00002 100270026
00003 100270026
00003 10027028
00003 100270029

你的意思是只有两个字段,如以上效果不?
如果这样,现假设这两个字段名分别为 id与num。更新的sql语法如下:
undate [table] set id='00001' where id <> '00001'

undate [table] set id='00001' where num not in (select t.num from (select num, count(num) n from [table] group by num ) t where t.n=1 )

楼主试试这个
另外楼主没有说清楚
00002 100270026
00003 100270026 比如这样的数据,楼主需要把哪个id变成00001呢?

看了半天愣是不明白你到底要做什么,如楼上说的,不是自相矛盾吗?
麻烦你把你想要的结果也写一下吧

且表中字段是不允许重复的!
所有不是00001的字段更新成 00001的字段<