我有这个查询。
DECLARE @testvar varchar
DECLARE @rescount int
DECLARE MY_CURSOR CURSOR
LOCAL STATIC READ_ONLY FORWARD_ONLY
FOR
select distinct value from [table] where tablevalId = n
OPEN MY_CURSOR
FETCH NEXT FROM MY_CURSOR INTO @testvar
WHILE @@FETCH_STATUS = 0
BEGIN
select @rescount = Count(value2) from [table] where value = @testvar and tablevalId = n
if @rescount > 1
BEGIN
select top (@rescount - 1) value2 from [table] where value = @testvar and tablevalId = n order by tablevalue3 desc --This is the value I want
END
else
BEGIN
select @rescount = 1 --This is a 'DO NOTHING'
END
FETCH NEXT FROM MY_CURSOR INTO @testvar
END
CLOSE MY_CURSOR
DEALLOCATE MY_CURSOR
我试图获得几组记录减去每组中的第一条记录。问题出现在@rescount不大于1.这就是实施IF / ELSE的时候。
在IF / ELSE之前,它会打印结果但在@rescount不大于1时中断。现在,它没有打印任何内容并告诉我"查询已成功完成"。
有人能就此提出建议吗?
由于
答案 0 :(得分:3)
为什么要使用游标?只需使用row_number()
:
select t.*
from (select t.*, row_number() over (partition by tablevalId, value
order by tablevalue3 desc) as seqnum
from [table] t
) t
where seqnum > 1;
如果你不需要游标,你应该避免游标。