2014-07-15 95 views
0

在MySQL中,我做如下产生有条件数字列:如何生成SELECT语句有条件数字列

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:[email protected]+1, @i:=1) as _keycol,@temp1:=col1 from align1,(select @temp1:=null,@i:=0)t 

一切都在mysql的完美。

sql fiidle

现在我想生成相同的列(在上面的例子中 “_KEYCOL” 是列名),在SQL Server中。

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

预先感谢您。

+0

你为什么要去黑暗的一面? – Strawberry

+0

在SQL中,表格表示*无序*集合。没有“上一个”行,除非列明确指定了排序。查询以任意顺序返回行。你的MySQL查询不正确(好,不稳定),因为没有订单。你有一列指定行的排序吗?如果后续行的值为1,会发生什么情况? –

回答

1

其使用Row_number方式SQLServer简单:

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

+0

现在它的工作..谢谢你的回答,但复杂的条件呢。我的意思是,如果我想通过复杂的条件增加或重置值,那么在sql server中有没有解决方案?再次感谢 –

+0

对于复杂的条件,您可以使用多于一列进行分区(并按顺序排列)。 – Milen

+0

好thnx很多.. –

1

试试这个:

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

现在它的工作..谢谢你的回答,但复杂的条件呢。我的意思是,如果我想通过复杂的条件增加或重置值,那么在sql server中有没有解决方案?再次感谢 –