请教一个跟排序有关的算法

xiamiwagua 2003-07-28 12:37:00
有如下数据:
id name datea dateb
12 aaa 2001-5-5 2001-9-6
232 bbb 2002-9-5 2003-1-1
123 ccc 2003-10-10 2002-7-7
2 ddd 2002-8-3 2001-8-5
要根据datea,dateb这两个字段的顺序,(就是order by datea,dateb)
把id字段改为相应的1,2,3,4……

运算后应为
id name datea dateb
1 aaa 2001-5-5 2001-9-6
2 ddd 2002-8-3 2001-8-5
3 bbb 2002-9-5 2003-1-1
4 ccc 2003-10-10 2002-7-7

请教各位该怎么写比较好。
...全文
45 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
yonsoft002 2003-08-02
  • 打赏
  • 举报
回复
想找小姐吗,来水园吧!
这里有老龟奴zyq_123雍亲正当大版主,还有人称辣花摧魔前青楼名妓smoke当镇小版主,肯定能满足您的需要!!!快来吧~~~~~~


woyaofengle 2003-07-29
  • 打赏
  • 举报
回复
select identity(int,1,1) id,name,datea,dateb into #t from 你的表 order by datea,dateb
TRUNCATE TABLE 你的表
insert 你的表 select * from #t
drop table #t

xiamiwagua 2003-07-29
  • 打赏
  • 举报
回复
pengdali(大力 V2.0) ,
加个字段条件
aid id name datea dateb
2 12 aaa 2001-5-5 2001-9-6
2 232 bbb 2002-9-5 2003-1-1
2 123 ccc 2003-10-10 2002-7-7
2 2 ddd 2002-8-3 2001-8-5
好像加一句where aid=2,order by 就不起作用了,#t里的id就不是按datea,dateb的顺序了
select identity(int,1,1) id,name,datea,dateb into #t from 你的表 where aid=2
order by datea,dateb
TRUNCATE TABLE 你的表
insert 你的表 select * from #t
drop table #t
xiamiwagua 2003-07-29
  • 打赏
  • 举报
回复
当然会有,
只要datea或dateb里面有相同的记录,前面的count(*),或者sum(1)当然就相同了
比如
id name datea dateb
12 aaa 2001-5-5 2001-9-6
232 bbb 2002-9-5 2003-1-1
123 ccc 2003-10-10 2002-7-7
2 ddd 2002-9-5 2001-8-5

那bbb和ddd的id都会变成3
xhwly 2003-07-29
  • 打赏
  • 举报
回复
不會有重復的呀!
xiamiwagua 2003-07-29
  • 打赏
  • 举报
回复
CrazyFor(上苍保佑吃完了饭的人民) ,zjcxc(邹建)

这么写,如果有相同的datea或dateb就不行,id是主键,不能重复,请问怎么解决
愉快的登山者 2003-07-28
  • 打赏
  • 举报
回复
select *, identity(int,1,1) iid into #t from yourtable order by datea,dateb
delete yourtable
insert yourtable
select iid,name,datea,dateb from #t
okwang1979 2003-07-28
  • 打赏
  • 举报
回复
使用 TRUNCATE TABLE 删除所有行
若要删除表中的所有行,则 TRUNCATE TABLE 语句是一种快速、无日志记录的方法。该语句总是比不带条件的 DELETE 语句要快,因为 DELETE 语句要记录对每行的删除操作,而 TRUNCATE TABLE 语句只记录整个数据页的释放。TRUNCATE TABLE 语句立即释放由该表的数据和索引占用的所有空间。所有索引的分发页也将释放。

与 DELETE 语句相同,使用 TRUNCATE TABLE 清空的表的定义,同其索引和其它相关的对象一起仍保留在数据库中。必须使用 DROP TABLE 语句才能除去表的定义。
liuningxy 2003-07-28
  • 打赏
  • 举报
回复
select sum(1) as Id,other_fields
into new_table
from old table

drop table old_table
pengdali 2003-07-28
  • 打赏
  • 举报
回复
select identity(int,1,1) id,name,datea,dateb into #t from 你的表 order by datea,dateb
TRUNCATE TABLE 你的表
insert 你的表 select * from #t
drop table #t
zjcxc 元老 2003-07-28
  • 打赏
  • 举报
回复
update 表 set id=(select sum(1) from 表 aa where aa.datea<=表.datea and aa.dateb<=表.dateb)
CrazyFor 2003-07-28
  • 打赏
  • 举报
回复
TRY:

update 表 set id=(select count(*) from 表 aa where aa.datea<=表.datea and aa.dateb<=表.dateb)

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧