我有一个查询我正在工作,我想增加一个字段,并重新启动计数器,当一个键值不同.
我知道这段代码不行.以编程方式,这就是我想要的
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
…最终结果看起来像这样:
ID Counter 3 1 3 2 3 3 3 4 6 1 6 2 6 3 7 1
是的,我被困在sql2k上.否则row_number()将工作.
解决方法
假设一张桌子:
CREATE TABLE [SoMetable] ( [id] INTEGER,[order] INTEGER,PRIMARY KEY ([id],[order]) );
在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
提示:2010年不久,您的sql Server将足够老,可以开车.
如果您使用sql Server 2005或更高版本,您将获得诸如ROW_NUMBER()OVER(PARTITION …)等精彩的新功能.