用SQL语句生成新列--排序列(1,2,3,4,5,6,。。)

来源:百度知道 编辑:UC知道 时间:2024/05/26 21:35:24
解决了40分。现在不给。不然没人答上浪费了。

首先这是SQLserver2000,不是2005。我要的是一列新的列,是排序之后自动生成的一列新列。
如果用于排序的列只有一列“vv”,那这样写:
select no=(select count(vv) from aaa t where t.vv<=o.vv ),*
from aaa o
order by vv
这样生成了no。

问题来了,如果用于排序的列是两列、三列呢?怎么写?
vv是用于排序的列,如果用于排序的列有三列呢?

按三列排完后再生成no,我要的新列

顺着你的思路说:现在是按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)进行了索引,查询速度会大大加快。

如何在SQL中对行进行动态编号,加行号这个问题,在数据库查询中,是经典的问题。

方法整理如下:

代码基于pubs样板数据库

在SQL中,一般就这两种方法.

1.使用临时表

可以使用select into 创建临时表,在第一列,加入Identify(int,1,1)作为行号,