能不能用一条SQL语句,来完成一个比较复杂的排序,大家帮忙解决一下.(100分)

  • 主题发起人 主题发起人 我行我酷
  • 开始时间 开始时间

我行我酷

Unregistered / Unconfirmed
GUEST, unregistred user!
这样一个表,有A、B两个字段
A B
张三 5
李四 7
王五 8
陈六 6
想把字段B的数值重新排序,按值从小到大排序,再把值改为如下:
A B
王五 1
李四 2
陈六 3
张三 4
之前己经有朋友帮忙解决这个问题,解决方法是:
select a.A,(select count(*)+1 from tablename b where b.B>a.B) as B from tablename a order by B
但是他的这种方法,只是把排序好后的A、B字段,放到一个临时表里,现在我是想,把这个B字段值,真正加入到表中,也就是更新替换原来表中的B字段。。。。看看能谁能帮忙解决一下。。。
 
高人在哪呢?
 
为了不使在跟踪器里显示sql,在语句后面加了'--password',第一次查询没问题,再查的话recordcount为何为0没有数据呢,
 
update t1 set B= NewB from yourtable t1,
(select a.A,(select count(*)+1 from tablename b where b.B>a.B) as NewB from tablename a order by B) t2 where t1.a = t2.a
你试一下吧
 
weichao9999不行啊,提示出错:除非同时指定了 TOP,否则 ORDER BY 子句在视图、内嵌函数、派生表和子查询中无效。
 
这种操作也不是经常性的,那就用临时表根新,为什么必须要一个sql呢?
 
update set t1.b = t2.Maxb - t1.b+1 from yourtable t1,(select max(b) Maxb from yourtable) t2

这样呢
 
SELECT A, IDENTITY (INT, 1, 1) AS B INTO TableName_ FROM TableName ORDER BY A
先生成一张临时的TableName_,再还原表名就可以了。
技术交流QQ:136293586
 
多人接受答案了。
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部