如何在SQL Server中创建RowNum列?

时间:2009-04-26 06:07:48

标签: sql-server

在Oracle中我们有“rownum”。 我可以在SQL Server中做什么?

3 个答案:

答案 0 :(得分:3)

在SQL Server 2005(和2008)中,您可以使用ROW_NUMBER function和OVER子句来确定行的计数顺序。

更新

嗯。我实际上并不知道Oracle版本的功能。如果它为每行提供一个唯一的编号(在整个表中),那么我不确定在SQL Server中是否有办法做到这一点。 SQL Server的ROW_NUMBER()仅适用于当前查询中返回的行。

答案 1 :(得分:1)

如果您有id列,则可以执行以下操作:

select a.*, 
(select count(*) from mytable b where b.id <= a.id) as rownum
from mytable a
order by id;

当然,这只适用于您能够以与ID顺序相同(或相反)的顺序订购rownums。

如果要选择适当的行子集,当然需要将相同的谓词应用于整个select和子查询:

select a.*, 
(select count(*) from table b where b.id <= a.id and b.foo = 'X') as rownum
from table a where a.foo = 'X'
order by id;

显然,这不是特别有效。

答案 2 :(得分:0)

根据我的理解,您需要使用ranking functions和/或TOP clause。 SQL Server功能是特定的,Oracle将这两个概念结合起来。

排名功能很简单:这就是你使用TOP的原因。 注意:您不能直接在ROWNUMBER上等待...

'Orable:
select 
  column_1, column_2 
from 
  table_1, table_2
where
  field_3 = 'some value'
and rownum < 5

--MSSQL:
select top 4
  column_1, column_2 
from 
  table_1, table_2
where
  field_3 = 'some value'