首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

sql2k下得出记录顺序号解决思路

2012-02-02 
sql2k下得出记录顺序号一般会这样实现usepubsgocreateprocedurehyc()asbeginifobject_id( #t )isnotnulldr

sql2k下得出记录顺序号
一般会这样实现
use   pubs
go
create   procedure   hyc()
as  
begin
if   object_id( '#t ')   is   not   null
    drop   table   #t
select   [id]=identity(int,1,1),a.*   into   #t   from   sales
select   *   from   #t
end
go
exec   hyc
go
--有个用oracle的大姐,问我不用临时表能不能实现,由于没有表间连
--接,本人一时也想不到,特来问问。

[解决办法]
sql2k下,如果有主键可以不用临时表,否则只能通过临时表:

select id=(select count(1) from 表 where 主键 <=a.主键),*from 表 a
[解决办法]
如果有一列能完全区分大小,可用比较的方法.

表jh03有下列数据:
name score
aa  99
bb  56
cc  56
dd  77
ee  78
ff  76
gg  78
ff  50

1. 名次生成方式1,Score重复时合并名次
SELECT * , Place=(SELECT COUNT(DISTINCT Score) FROM jh03 WHERE Score > = a.Score)
FROM jh03 a
ORDER BY Place
结果
Name Score Place
---------------- ----------------- -----------
aa 99.00 1
ee 78.00 2
gg 78.00 2
dd 77.00 3
ff 76.00 4
bb 56.00 5
cc 56.00 5
ff 50.00 6

2. 名次生成方式2 , Score重复时保留名次空缺
SELECT * , Place=(SELECT COUNT(Score) FROM jh03 WHERE Score > a.Score) + 1
FROM jh03 a
ORDER BY Place
结果
Name Score Place
--------------- ----------------- -----------
aa 99.00 1
ee 78.00 2
gg 78.00 2
dd 77.00 4
ff 76.00 5
bb 56.00 6
cc 56.00 6
ff 50.00 8

热点排行
Bad Request.