SELECT (select count(*) from mytable k2 where k2.scope<=k1.scope),scope into mytable_t
FROM mytable k1)
drop table mytable; 然后改名字mytable_t --->mytable
FROM mytable k1)
drop table mytable; 然后改名字mytable_t --->mytable
update a
set a.rank=b.id
from
YouTable a inner join #TempTable b
on a.scope=b.scope以上语句要求SCOPE列值唯一,若不唯一需要在YouTable加上一个标识列
update yourtable set rank = (
select count(*)
from yourtable as t
where t.scope > yourtable.scope or (t.scope = yourtable.scope and t.id <=yourtable.id)
)scope相同的,id号小的rank小。
你的SQL在Access里是不能運行的,Jet-SQL的Update語法不支持這種寫法,如果是待更新的數據源來自多個表時,它只支持像這種
Update table1 INNER JOIN table2 ON table1.col=table2.col ....
Set table1.Colname=table2.colname而且,這個問題我發現除了smartdonkey(聪明的毛驴)兄的方法之外,再沒什麼其它方法了,
因我試過,先把名次求出來放入一個Query中,第二步再用Update更新,嘿嘿,萬萬沒想到,這Access 硬是死活都不認我的Update, 提示我說"動作必須使用更新查詢",而我明明用的是正確的Jet-SQL語法!!! 後來才發現用於Update里的Query不能有雙重的Select,否則死活都不行。......
我用的是子查询,sqlserver肯定支持,access是否支持,我却没有研究过,谢谢指正。