在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 server中生成相同的列(上例中“_KEYCOL”是列名)。
很简单,我只想在select语句中生成一个新列,并且需要从sql server中的其他列值有条件地设置此列的值,这与我在mysql中实现的相同。
提前谢谢。
答案 0 :(得分:1)
使用SQLServer
{/ 1}} Row_number
更容易
select col1,col2, row_number() over (partition by col1 order by col1) as _KEYCOL
from align1
此处有更多信息: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