在Oracle中我们有“rownum”。 我可以在SQL Server中做什么?
答案 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'