Foxtable(狐表)用户栏目专家坐堂 → 捉摸了半天,搞不定,请各位指导一条SQL语句。


  共有15143人关注过本帖树形打印复制链接

主题:捉摸了半天,搞不定,请各位指导一条SQL语句。

帅哥哟,离线,有人找我吗?
lxl
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:858 积分:6071 威望:0 精华:19 注册:2008/9/1 9:13:00
  发帖心情 Post By:2009/12/1 13:57:00 [显示全部帖子]

select ROW_NUMBER() over (order by 排序列),*
from 表

 回到顶部
帅哥哟,离线,有人找我吗?
lxl
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:858 积分:6071 威望:0 精华:19 注册:2008/9/1 9:13:00
  发帖心情 Post By:2009/12/1 15:46:00 [显示全部帖子]

有主键列吗?如果有主键列的话就好办一点:
update 表名
set 更新列 = t.rn
from 表名,(select 主键列,ROW_NUMBER() over(order by 更新列) As rn from 表名) t
where 表名.主键列 = t.主键列


 回到顶部
帅哥哟,离线,有人找我吗?
lxl
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:858 积分:6071 威望:0 精华:19 注册:2008/9/1 9:13:00
  发帖心情 Post By:2009/12/1 20:23:00 [显示全部帖子]

我没办法了图片点击可在新窗口打开查看

access 里面实现row_number是这样的:
假设有成绩表:

表a
name score
A 54
B 21
C 12
D 25
E 41
F 25
G 13
H 71
I 8
J 66
K 72
L 5
M 56
N 29
O 85
P 23
Q 67
R 74
S 41
T 23
U 74
V 19

SELECT a.name, (Sum(IIf(b.score<a.score,1,0))+Sum(IIf(b.score=a.score And b.name<=a.name,1,0))) AS row_number
FROM a, a AS b
group by a.name


但是update a,r set a.score = r.row_number where a.name=r.name
这里老实提示操作必须是可更新的查询,不明白为什么。
只是想根据排好的序更新a表,可系统会要求r表必须是可更新的

[此贴子已经被作者于2009-12-1 20:25:38编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
lxl
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:858 积分:6071 威望:0 精华:19 注册:2008/9/1 9:13:00
  发帖心情 Post By:2009/12/1 22:31:00 [显示全部帖子]

有一个替代办法:
在Access查询的 SQL视图里面分别输入下面3个sql:
SELECT a.name, (Sum(IIf(b.score<a.score,1,0))+Sum(IIf(b.score=a.score And b.name<=a.name,1,0))) AS row_number into r
FROM a, a AS b
group by a.name;
点感叹号执行后输入:
update a,r set a.score = r.row_number where a.name=r.name
点感叹号执行后输入:
drop table r


 回到顶部