如何在select语句中生成有条件的数值列

时间:2014-07-15 10:51:09

标签: mysql sql sql-server

在Mysql中,我按照以下方式有条件地生成数字列:

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 ('1','1');
insert into align1 values ('1','1');
insert into align1 values ('10','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 fiidle

现在我想在sql server中生成相同的列(上例中“_KEYCOL”是列名)。

很简单,我只想在select语句中生成一个新列,并且需要从sql server中的其他列值有条件地设置此列的值,这与我在mysql中实现的相同。

提前谢谢。

2 个答案:

答案 0 :(得分:1)

使用SQLServer {/ 1}} Row_number更容易

select col1,col2, row_number() over (partition by col1 order by col1) as _KEYCOL
from align1

Demo Here

此处有更多信息:http://msdn.microsoft.com/en-us/library/ms186734.aspx

答案 1 :(得分:1)

试试这个:

SELECT *,
        ROW_NUMBER() OVER (PARTITION BY col1 ORDER BY col1,col2)_Keycol
FROM dbo.align1