大家来讨论下这种需求SQL能不能完成(关于Update一个字段)
有如下一张表:T1   
 F1         F2         F3                           F1         F2         F3 
 1            a                                             1            a            01 
 1            b                                             1            b            02 
 2            c                                             2            c            01 
 2            d                                             2            d            02 
 2            e                                             2            e            03 
 3            f                                             3            f            01 
 1            g                                             1            g            03   
 第三个字段是空的。现在的问题是,我要更新第三个字段,数值是第一个字段的序列号。更新完变成右边的样子。   
 两个问题: 
 1、如果不用临时表能完成吗? 
 2、如果有临时表,如何实现?怎样写才更有效率? 
 数据一共有几万条,也不是很多。 
------解决方案--------------------没有用存储过程,就是一条普通的UPDATE语句,你可以将文本文件通过BULK INSERT到SQL Server 2000中再做处理。   
 最开始的SQL语句少了一组 "() ",更正一下:   
 update t 
 set 
     F3=right( '0 '+rtrim((select count(*) from T1 where F1=t.F1 and F2 <=t.F2)),2) 
 from 
     T1 t 
------解决方案--------------------1、不用ORDER BY。   
 2、不是 COUNT 一遍整张表。   
 3、有 10000 条记录,就 COUNT 10000 次,不需要 10000×10000 。
------解决方案--------------------create table tb(F1 int,F2 varchar(10),F3 varchar(10)) 
 insert into tb values(1,     'a ', ' ') 
 insert into tb values(1,     'b ', ' ') 
 insert into tb values(2,     'c ', ' ') 
 insert into tb values(2,     'd ', ' ') 
 insert into tb values(2,     'e ', ' ') 
 insert into tb values(3,     'f ', ' ') 
 insert into tb values(1,     'g ', ' ') 
 go   
 --查询 
 select f1,f2,right( '00 '+cast(f3 as varchar),2) f3 from 
 ( 
   select f1,f2,f3=(select count(1) from tb where f1=a.f1 and f2 <a.f2)+1 from tb a 
 ) t 
 /* 
 f1          f2         f3    
 ----------- ---------- ----  
 1           a          01 
 1           b          02 
 2           c          01 
 2           d          02 
 2           e          03 
 3           f          01 
 1           g          03 
 (所影响的行数为 7 行) 
 */   
 --更改 
 update tb 
 set f3 = m.f3 
 from tb, 
 ( 
   select f1,f2,right( '00 '+cast(f3 as varchar),2) f3 from 
   ( 
     select f1,f2,f3=(select count(1) from tb where f1=a.f1 and f2 <a.f2)+1 from tb a 
   ) t 
 ) m 
 where tb.f1