回答

收藏

SQL Server 2000中的Row_Number模拟

技术问答 技术问答 92 人阅读 | 0 人回复 | 2023-09-13

我有一个示例输入表
" Y$ R9 Q4 p& I6 D0 M4 A2 dDeclare  @input TABLE(Name VARCHAR(8))
4 A  P5 Y" }3 r7 IINSERT INTO @input(Name)  values('Aryan') 5 t# [$ \: D$ @* U( R
INSERT INTO @input(Name)  values('Aryan') 6 e1 L) T5 |; e6 \; Q+ @
INSERT INTO @input(Name)  values('Joseph')
, Y# L7 K# }; {9 M! c* ]INSERT INTO @input(Name)  values('Vicky')
" d1 H2 W5 z" `* l1 KINSERT INTO @input(Name)  values('Jaesmin') * E2 F2 C3 p1 l! e! W0 T
INSERT INTO @input(Name)  values('Aryan') : h& C+ Q& |/ J" d( }) `
INSERT INTO @input(Name)  values('Jaesmin') , h/ E0 J" x& B8 U
INSERT INTO @input(Name)  values('Vicky') * b5 z2 v" S6 ~, o) |
INSERT INTO @input(Name)  values('Padukon') % {7 k: m% U) \# R
INSERT INTO @input(Name)  values('Aryan')
! K" b& t" z; u' dINSERT INTO @input(Name)  values('Jaesmin')
7 v) h1 k7 A: \! }& i$ O7 F, A/ WINSERT INTO @input(Name)  values('Vick') * d* s1 |7 B) m
INSERT INTO @input(Name)  values('Padukon')
: B$ t( i: X; tINSERT INTO @input(Name)  values('Joseph')
! N! H- n8 A* Q( o$ XINSERT INTO @input(Name)  values('Marya')
% O! l1 o  ]* s1 ?: @INSERT INTO @input(Name)  values('Vicky')0 ~9 @4 a7 T7 Z: [, Q
我也有一个理货桌子如下+ c1 Z* P9 j* G: |0 Y% l
declare @t table(n int)
' W: q- _, r( Q$ Pinsert into @t select 1 union all select 2 union all
% p5 B9 ^- b% H; n8 }select 3 union all select 4 union all select 5 union all
9 x# A- h# v; P$ Q) Wselect 6 union all select 7 union all select 8 union all
& b) B; b" X5 ]- v. r" |( Lselect 9 union all select 10 union all select 11 union all
  p7 W9 L4 l- b$ U& aselect 12 union all select 13 union all select 14 union all$ ]- C* R  y# i% U- E
select 15 union all select 16 union all select 17 union all" W6 A8 \- t/ M5 r% E
select 18 union all select 19 union all select 20+ B( F$ F, R& T( h
在Sql Server 2005中,如果我这样做
0 E: V1 A0 L3 f2 o' d5 K( W( h3 E Select rn, name from (3 A7 j+ V: @9 i: P/ a
    select ROW_NUMBER()over (order by Name) as rn , * from @input) x
& I) c, D  D: d+ L5 @6 W; X8 o3 q    where rn % 2  0
; B; C7 F" v7 ?& s+ r我得到的输出为3 h7 R# _& _, M
rn  name
7 ]9 O7 l, Y  ]1   Aryan
" P% c+ `$ @. J5 T3   Aryan
/ Y) N' Z8 v  j5   Jaesmin
( f; k# h1 r8 V8 l) F7   Jaesmin
6 p. k1 k- C9 U1 v1 L9   Joseph9 t0 v2 R# Q2 v# w% ]
11  Padukon0 x0 x8 H- Y0 d1 |
13  Vick+ k' l) _  S% M# l4 ]% i% m* E
15  Vicky# v4 \/ B) h8 ]. [; I
我只能使用Sql Server2000。如何获得相同的输出?' {  a* f! l. i
我尝试过, @7 S2 r1 y7 C  w+ w$ |5 K
SELECT name, (SELECT COUNT(*) FROM @input AS i2 WHERE i2.Name 但是输出错误/ w8 \" N7 n, ~: C7 g
name    rn6 j. [$ m0 T+ ]$ z1 D+ `! K9 M4 K; w/ ]
Aryan   4
. M& x: B5 Z& b9 f( jAryan   4/ `2 R3 x* d; ]) ^
Joseph  9
, V% V3 {* F6 n* W. \Vicky   16
8 d0 `& E/ z' \# F! v) bJaesmin 7
+ o* s/ I  u6 L' o: }Aryan   4
) u' E% ~# o0 \% K; mJaesmin 72 C+ K8 y/ J3 O7 g1 e% R+ ]7 f
Vicky   16" x" Y( d8 g0 O/ @5 x
Padukon 12
" X- v& P% x% `, g! u( ^% ?4 xAryan   4
( L9 m; c5 g7 S6 KJaesmin 7! G7 w7 P9 N# @: @  h; V" v0 w
Vick    13
" n1 D- u/ `) `" E, oPadukon 12
6 y$ n& y1 Q! {8 M! [$ z' M8 O; T/ JJoseph  9* g1 Y5 ]' n" b  h9 j5 B
Marya   10+ X; z3 K/ P& M& t( q# ~- N
Vicky   16' W: s" {6 e, o% }, H6 h7 [0 J
               
2 Q9 J* g+ H- i0 y, Y解决方案:
, l9 {9 P: b* f7 G               
- f+ V" m- p: _( W
0 t/ h5 k8 i5 T+ N# G3 K+ @
, J9 F* A- s1 s; ?                使用此查询:3 B" `2 J" q, Y; _' S7 v- N
SELECT t1.name, t.n7 [2 W3 c+ t  U- ~2 O7 [
FROM. b$ `$ X3 q/ M
(
6 B- H3 \5 L1 v( |0 Q8 X) h    SELECT a.name, a.c, (SELECT COUNT(*) FROM @input AS i2 WHERE i2.Name  t1.rn - t1.c
* `1 }% k0 h7 G9 s它产生所需的输出:9 b  j8 b. L: k9 A- s
name     n- |, g3 J$ ~( \: m; G3 J' ^
-------- ------------ Y( v1 J. `* j4 v5 f
Aryan    1+ \7 k7 k) X5 _. v
Aryan    2
' {. ~+ L* ]( Y$ D6 iAryan    34 c1 R4 J6 m( t; B7 U2 }
Aryan    4
8 l# H# p) C. U5 F7 V6 i/ [, rJaesmin  5. @* }2 v0 P$ A+ t
Jaesmin  6; {5 j7 T8 R, E3 N* T7 V( E
Jaesmin  7# h* ^$ e+ g* j* L! F: ]% W
Joseph   8$ \. H( m& Y/ u
Joseph   99 F- f! b$ S0 W/ r% J( Y
Marya    10+ t; `0 |/ d2 z; j, F/ B: p6 E
Padukon  11
+ o0 o# p& w& R( G: O- t5 RPadukon  125 _' E' V: d4 H+ K
Vick     13
9 m, X8 @1 N4 w% S7 o: c% z( C! KVicky    145 F$ ^& _* E4 t: q
Vicky    15
1 e+ B5 |! p) SVicky    16
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则