如何在选择查询中增加

Mik*_*ook 10 sql t-sql sql-server sql-server-2000

我有一个我正在处理的查询,我想增加其中一个字段,并在键值不同时重新启动计数器.

我知道这段代码不起作用.以编程方式这是我想要的......

declare @counter int, @id
set @counter = 0
set @id = 0

select distinct 
  id, 
  counter = when id = @id 
              then @counter += 1
            else @id = id  
               @counter = 1     
Run Code Online (Sandbox Code Playgroud)

...最终结果看起来像这样:

ID    Counter
3     1
3     2 
3     3
3     4
6     1
6     2
6     3
7     1
Run Code Online (Sandbox Code Playgroud)

是的,我被SQL2k困住了.否则row_number()会起作用.

Bil*_*win 13

假设一张桌子:

CREATE TABLE [SomeTable] (
  [id] INTEGER,
  [order] INTEGER,
  PRIMARY KEY ([id], [order])
);
Run Code Online (Sandbox Code Playgroud)

在Microsoft SQL Server 2000中获得此功能的一种方法是使用子查询来计算具有相同ID和较低排序的行.

SELECT *, (SELECT COUNT(*) FROM [SomeTable] counter 
           WHERE t.id = counter.id AND t.order < counter.order) AS row_num
FROM [SomeTable] t
Run Code Online (Sandbox Code Playgroud)

提示:现在是2010年.很快您的SQL Server就会老到可以开车了.

如果您使用SQL Server 2005或更高版本,您将获得很棒的新功能ROW_NUMBER() OVER (PARTITION...).

  • SQL 2000仍然很有趣.在13岁以上,SQL Server 7.0大部分时间都在闷闷不乐,整天都在玩视频游戏. (5认同)
  • 我们实际上正在研究SQL2k的第一款车.如果他保持鼻子清洁并取得好成绩,那将是他的16岁生日礼物.; O) (4认同)
  • 他们成长地好快!*嗅出* (3认同)
  • *Pfft* - 当我尝试使用CTE或分析函数时,SQL 2000和7.0一直告诉我要离开他们的草坪...... (3认同)

小智 8

是的你想要ROW_NUMBER().

我会尝试:

SELECT id, ROW_NUMBER() OVER (PARTITION BY ID ORDER BY ID) AS Counter
Run Code Online (Sandbox Code Playgroud)