SQL实现IF / ELSE中断结果输出

时间:2015-10-20 13:48:26

标签: sql-server tsql

我有这个查询。

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时中断。现在,它没有打印任何内容并告诉我"查询已成功完成"。

有人能就此提出建议吗?

由于

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;

如果你不需要游标,你应该避免游标。