Mysql 在select查询中使用变量

Mysql 在select查询中使用变量,mysql,sql,sql-server,Mysql,Sql,Sql Server,我想在变量中存储前一行的列值,然后将此变量值与当前行的列进行比较。在mysql中,例如 所以,让我们举一个与在SQLFIDLE中加载的相同的简单示例 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'); ins

我想在变量中存储前一行的列值,然后将此变量值与当前行的列进行比较。在mysql中,例如

所以,让我们举一个与在SQLFIDLE中加载的相同的简单示例

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中的一切都是完美的

现在我想在SQLServer中实现相同的查询

在mysql中,我使用了会话变量,所以我不需要声明,但在sql server中,我需要首先声明

我在sql server 2012中尝试了以下查询

我无法执行上述查询,它给我错误:

Incorrect syntax near '='.
然后,我尝试递增数字,以确保我能够递增select查询中的变量值..:

我得到了一个错误:

A SELECT statement that assigns a value to a variable must not be combined with data-retrieval operations
即使我使用了LAG(),那么如何在select语句中有条件地递增或重置变量呢

所以我想在SQLServer2012和mysql中得到相同的结果


提前谢谢您。

试试这个。它在SQLServer2012的SSMS查询窗口中对我有效。(这是我第一次在这里发帖,如果格式不正确,请原谅!)

结果:

    @i = 3
A SELECT statement that assigns a value to a variable must not be combined with data-retrieval operations
 IF OBJECT_ID('tempdb..#temp') IS NOT NULL  
  DROP TABLE #temp

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');
insert into align1 values ('100','1');
insert into align1 values ('300','1');
insert into align1 values ('500','1');
insert into align1 values ('500','1');

DECLARE @count INT = 0;
DECLARE @prev  VARCHAR(100);
DECLARE @current VARCHAR(100);
DECLARE @i INT = 0;

SELECT @count = count(*) from align1

SELECT * INTO #temp FROM align1
SET @current = (SELECT TOP 1 col1 FROM #temp)
DELETE TOP (1) FROM #temp

WHILE @Count > 0
BEGIN
SET @prev = @current;
SET @current = (SELECT TOP 1 col1 From #temp)
IF @current = @prev 
   BEGIN
   SET @i = @i + 1;
   END
 DELETE TOP (1) FROM #temp;
 SET @Count = @Count - 1;
END

PRINT '@i = ' + CONVERT(VARCHAR,@i)
    @i = 3