【发布时间】:2011-09-23 08:05:21
【问题描述】:
我有一个示例输入表
Declare @input TABLE(Name VARCHAR(8))
INSERT INTO @input(Name) values('Aryan')
INSERT INTO @input(Name) values('Aryan')
INSERT INTO @input(Name) values('Joseph')
INSERT INTO @input(Name) values('Vicky')
INSERT INTO @input(Name) values('Jaesmin')
INSERT INTO @input(Name) values('Aryan')
INSERT INTO @input(Name) values('Jaesmin')
INSERT INTO @input(Name) values('Vicky')
INSERT INTO @input(Name) values('Padukon')
INSERT INTO @input(Name) values('Aryan')
INSERT INTO @input(Name) values('Jaesmin')
INSERT INTO @input(Name) values('Vick')
INSERT INTO @input(Name) values('Padukon')
INSERT INTO @input(Name) values('Joseph')
INSERT INTO @input(Name) values('Marya')
INSERT INTO @input(Name) values('Vicky')
我还有一个如下的计数表
declare @t table(n int)
insert into @t select 1 union all select 2 union all
select 3 union all select 4 union all select 5 union all
select 6 union all select 7 union all select 8 union all
select 9 union all select 10 union all select 11 union all
select 12 union all select 13 union all select 14 union all
select 15 union all select 16 union all select 17 union all
select 18 union all select 19 union all select 20
如果我这样做的话,在 Sql Server 2005 中
Select rn, name from (
select ROW_NUMBER()over (order by Name) as rn , * from @input) x
where rn % 2 <> 0
我得到的输出为
rn name
1 Aryan
3 Aryan
5 Jaesmin
7 Jaesmin
9 Joseph
11 Padukon
13 Vick
15 Vicky
但我仅限于 Sql server 2000。我怎样才能获得相同的输出?
我试过了
SELECT name, (SELECT COUNT(*) FROM @input AS i2 WHERE i2.Name <= i1.Name) As rn
FROM @input AS i1
但是输出错误
name rn
Aryan 4
Aryan 4
Joseph 9
Vicky 16
Jaesmin 7
Aryan 4
Jaesmin 7
Vicky 16
Padukon 12
Aryan 4
Jaesmin 7
Vick 13
Padukon 12
Joseph 9
Marya 10
Vicky 16
【问题讨论】:
-
@marc_s:正如@Maximilian Mayerl 所写 - 这是可能的;)。
-
计数表的意义何在?
-
您需要向
@Input添加一列,或者根据@Maximilians 的回答将数据插入到另一个临时表/表变量中,因为SQL Server 中无法订购例如Name = 'Aryan' 的四行 -
@Damien_The_Unbeliever,方式存在!看我的回答。
标签: sql tsql sql-server-2000