开发者

Row_Number simulation in Sql server 2000

开发者 https://www.devze.com 2023-03-15 19:49 出处:网络
I have a sample input table as Declare@input TABLE(Name VARCHAR(8)) INSERT INTO @input(Name)values(\'Aryan\')

I have a sample input table as

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')

Also I have a tally table as under

d开发者_StackOverfloweclare @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

In Sql Server 2005 if I do as

 Select rn, name from (
    select ROW_NUMBER()over (order by Name) as rn , * from @input) x
    where rn % 2 <> 0

I get the output as

rn  name
1   Aryan
3   Aryan
5   Jaesmin
7   Jaesmin
9   Joseph
11  Padukon
13  Vick
15  Vicky

Bu I am restricted to Sql server 2000. How can I get the same output?

I have tried with

SELECT name, (SELECT COUNT(*) FROM @input AS i2 WHERE i2.Name <= i1.Name) As rn
FROM @input AS i1

but the output is wrong

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


Declare your table variable as

Declare  @input TABLE(_id int identity(1, 1), Name VARCHAR(8))

And then reqrite your query as

Select _id, name 
from @input
where _id % 2 <> 0


Use this query:

SELECT t1.name, t.n
FROM
(
    SELECT a.name, a.c, (SELECT COUNT(*) FROM @input AS i2 WHERE i2.Name <= a.Name) [rn]
    FROM
    (
        SELECT i.name, count(*) c
        FROM @input i
        GROUP BY i.name
    )a
)t1
JOIN @t t ON t.n <= t1.rn
WHERE t.n > t1.rn - t1.c 

It produces desired output:

name     n
-------- -----------
Aryan    1
Aryan    2
Aryan    3
Aryan    4
Jaesmin  5
Jaesmin  6
Jaesmin  7
Joseph   8
Joseph   9
Marya    10
Padukon  11
Padukon  12
Vick     13
Vicky    14
Vicky    15
Vicky    16
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号