回答

收藏

如何在选择查询中增加

技术问答 技术问答 233 人阅读 | 0 人回复 | 2023-09-14

我有一个正在处理的查询,我想增加一个字段并在键值不同时重新启动计数器。
2 k5 G* j& k* d  v5 f' N我知道这段代码行不通。以编程方式,这就是我想要的…
4 `! S: O0 ]" v. Wdeclare @counter int, @id
1 m( Z6 {9 u* d- `) Eset @counter = 05 A6 G4 x3 O, K9 X
set @id = 0
" k& P; ?" i! W/ {" S2 e: e, V$ iselect distinct
$ ?/ Z# Q+ N, A/ j  id,
1 {) O& `8 n8 i( a( w* G  counter = when id = @id
* M& x4 r) K+ e+ U3 q7 Q- D              then @counter += 1
* A3 o2 c( A1 T8 c; E9 |# o+ G            else @id = id  2 E9 h( r# j9 e; a; x: ]2 Z9 L
               @counter = 1
* L. |- A0 h2 H+ ~, w# E: I…最终结果看起来像这样:4 a% c, `( r' s: V9 X$ ?3 D
ID    Counter! ?, d, P- R2 T* ~" m* E" s
3     1
: M& \/ |" t, r4 p9 e2 E6 o3     2 % Q3 C' m2 T6 D/ B! z4 R# m
3     3* a" A& q; a4 R! a3 s9 r. z
3     48 `, G' Q0 p7 Y6 ?' s9 C4 b; V1 ]0 I
6     1$ z) p6 y5 h: j9 C' H, M
6     2% ]. O# i* k1 J; r5 m( @4 Q
6     3/ u  n+ v" C1 `; `& _
7     1
# ^" M( d, V3 ?& V( Y5 f# y" N0 U是的,我坚持使用SQL2k。否则,该row_number()将起作用。
" D# l9 t6 P* d( c" I6 |) e7 i               
" j1 h# K$ l( j5 C) ?  Y解决方案:
! U1 S1 U$ D. J- _               
1 m; V8 e6 y. C4 O5 y3 T  t4 r9 }# e6 {

& t# I% ~/ H# \  i$ s7 N  j0 Y) K                假设一个表:
2 t4 U" Q! z: gCREATE TABLE [SomeTable] (
. I4 D+ o% c) v3 g8 I+ N  [id] INTEGER,8 m" `, q' B( M' M+ r& u
  [order] INTEGER,
& W$ A8 ?% M& d8 T  PRIMARY KEY ([id], [order])
4 u  y  M, g6 P- n5 v7 |/ L);
/ p' e" H- M5 K9 ?在Microsoft SQL Server 2000中获得此权限的一种方法是使用子查询对具有相同ID和较低顺序的行进行计数。- k# u# r* N6 Q& ]
SELECT *, (SELECT COUNT(*) FROM [SomeTable] counter 0 q2 R& s& O6 L1 V: L+ e/ e5 D
           WHERE t.id = counter.id AND t.order 提示: 现在是2010年。很快,您的SQL Server将足够老,可以驱动了。' z9 w$ @+ |1 g1 u- T' F
如果您使用SQL Server 2005或更高版本,则将获得诸如的出色新功能ROW_NUMBER() OVER (PARTITION...)。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则