【发布时间】:2023-03-28 13:54:01
【问题描述】:
我想将前一行的列值存储在变量中,然后将此变量值与当前行的列进行比较。在mysql中,例如sqlfiddle
让我们举个简单的例子,就像在 sql fiddle 中加载的一样
create table align1 (col1 varchar(100),col2 varchar(100));
insert into align1 values ('1','1');
insert into align1 values ('1','1');
insert into align1 values ('10','1');
insert into align1 values ('100','1');
我想要实现的是,如果 col1 的值对于前一行和当前行相同,则递增
查询:
select col1,col2,if(@temp1=col1,@i:=@i+1, @i:=1) as _keycol,@temp1:=col1 from align1,(select @temp1:=null,@i:=0)t
mysql 一切都很完美。
现在我想在 sql server 中实现相同的查询。
在mysql中我使用了会话变量,所以我不需要声明,但在sql server中我需要先声明。
我在 sql server 2012 中尝试了以下查询,sqlfiddle
declare @temp1 varchar(1024)='',@i int =0
select col1,col2,case when @temp1=col1 then @i=@i+1 else @i=1 end as _keycol,@temp1=col1 from align1;
我无法执行上述查询,它给了我错误:
Incorrect syntax near '='.
然后我只是尝试增加数字以确保我能够在选择查询中增加变量值..sqlfiddle:
declare @i int =0
select col1,@i=@i+1 from align1
我得到了错误:
A SELECT statement that assigns a value to a variable must not be combined with data-retrieval operations
即使我使用 LAG(),我如何在 select 语句中有条件地增加或重置变量。
所以我想在 mysql 的 sql server 2012 中得到相同的结果。
提前谢谢你..
【问题讨论】:
标签: mysql sql sql-server