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...)
.
小智 8
是的你想要ROW_NUMBER().
我会尝试:
SELECT id, ROW_NUMBER() OVER (PARTITION BY ID ORDER BY ID) AS Counter
Run Code Online (Sandbox Code Playgroud)