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

解决了40分。现在不给。不然没人答上浪费了。首先这是SQLserver2000,不是2005。我要的是一列新的列,是排序之后自动生成的一列新列。如果用于排序的列只有一列“... 解决了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,我要的新列
展开
 我来答
WHITE_WIN
2008-11-27 · TA获得超过6111个赞
知道大有可为答主
回答量:3759
采纳率:50%
帮助的人:1936万
展开全部
顺着你的思路说:现在是按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)进行了索引,查询速度会大大加快。
翼帆
2008-11-27 · TA获得超过1729个赞
知道小有建树答主
回答量:819
采纳率:60%
帮助的人:524万
展开全部
如何在SQL中对行进行动态编号,加行号这个问题,在数据库查询中,是经典的问题。

方法整理如下:

代码基于pubs样板数据库

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

1.使用临时表

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

这样在产生的临时表中,结果集就有了行号.也是目前效率最高的方法.

这种方法不能用于视图

代码:

set nocount on

select IDentify(int,1,1) 'RowOrder',au_lname,au_fname into #tmp from authors

select * frm #tmp

drop table #tmp

2.使用自连接

不用临时表,在SQL语句中,动态的进行排序.这种方法用到的连接是自连接,连接关系一般是

大于,

代码:

select rank=count(*), a1.au_lname, a1.au_fname

from authors a1 inner join authors a2 on a1.au_lname + a1.au_fname >= a2.au_lname + a2.au_fname

group by a1.au_lname, a1.au_fname

order by count(*)

运行结果:

rank au_lname au_fname

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

1 Bennet Abraham

2 Blotchet-Halls Reginald

3 Carson Cheryl

4 DeFrance Michel

5 del Castillo Innes

6 Dull Ann

7 Greene Morningstar

... ....

缺点:

1.使用自联接,所以该方法不适用于处理大量行。它适用于处理几百行。

对于大型表,一定要使用索引以避免进行大范围的搜索,或用第一种方法.

2.不能正常处理重复值。当比较重复值时,会出现不连续的行编号。

如果不希望出现这种现象,可以在电子表格中插入结果时隐藏排序列,而是使用电子表格编号。

或用第一种方法

优点:

这些查询可以用于视图和结果格式设置中
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友efae51f
2008-11-27 · TA获得超过2221个赞
知道大有可为答主
回答量:6916
采纳率:0%
帮助的人:3013万
展开全部
首先你的语句是给记录编号用的

咋可能有两列三列的呢

HI 我细聊吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式