数据库生成数字序列(行号)

数据库生成数字序列(行号),第1张

oracle可以直接生成数字序列:

select rownum from dual connect by rownum<=100

如果是对表中的数据排序后生成行号,可以用窗口函数:

select row_number() over ([partition by part_fieldname] order by sort_fieldname[desc]) ,fieldname1,fieldname2 from t

顺着你的思路说:现在是按VV1,VV2,VV3,VV4,VV5排序(适用于任意类型的字段):

select no=

(select count(1) from aaa t where

t.vv1<o.vv1 or --一个字段排序到此为止,但把<换成<=

t.vv1=o.vv1 and t.vv2<o.vv2 or--两个到此为止,但把最后的<换成<=

t.vv1=o.vv1 and t.vv2=o.vv2 and t.vv3<o.vv3 or--三个、四个以此类推

t.vv1=o.vv1 and t.vv2=o.vv2 and t.vv3=o.vv3 and t.vv4<o.vv4 or

t.vv1=o.vv1 and t.vv2=o.vv2 and t.vv3=o.vv3 and t.vv4=o.vv4 and t.vv5<=o.vv5

),*

from aaa o

order by vv1,vv2,vv3,vv4,vv5

------------------------------

看出来了吧?有多少个变量排序,就写多少层,书写起来麻烦,但查询起来,一个和多个速度基本是一样的,没有多大差别。

按照规律书写也并不麻烦,

规律总结一下,就是,

一层层复制,稍作修改。每层长出一组

每层最后一个符号是小于号(<),其余都是等号。

所有层的最后一个符号是小于等于(<=)。

如果按排序字段(本例为VV1,VV2,VV3,VV4,VV5)进行了索引,查询速度会大大加快。

排序的命令是sort,格式是:

SORT TO 新表名 ON 字段名

补充:

例如下面的命令:

use 学生

sort on 学号 to 学生_排序

产生一个新的 学生_排序.DBF 文件,里面是排序了的。

如果你只是向按照某个标准进行排序查看一下,不生成新的文件,那么可以使用SQL语句,例如:

SELECT * FROM 学生 ORDER BY 总成绩 DESC


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10046763.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存