Possible Duplicate:
ROW_NUMBER() without over in SQL
我有一个对每一列进行排序的网格,一次只能显示 50 行。
我正在使用 sql server 2005 作为数据库。
现在sql server 2005中有ROW_NUMBER函数来过滤行号的数据,但是Over(order by [Column])
是强制使用的。在我的例子中,我必须用不同的列对我的网格进行排序,所以我不能按子句顺序使用静态列名称。限制是,我必须使用静态查询。
你们能帮我解决这个问题吗?
每列使用多个 ROW_NUMBER 子句并选择相关的子句:
....
ROW_NUMBER() OVER (ORDER BY [Column1]) as rn1,
ROW_NUMBER() OVER (ORDER BY [Column2]) as rn2,
ROW_NUMBER() OVER (ORDER BY [Column3]) as rn3,
ROW_NUMBER() OVER (ORDER BY [Column4]) as rn4
....
OR 使用 CASE 表达式。注意:所有数据类型必须兼容
ROW_NUMBER() OVER (ORDER BY CASE @sort
WHEN 1 THEN [Column1]
WHEN 1 THEN [Column2]
WHEN 1 THEN [Column3]
...
END
OR 如果您确实想要任意行号,请执行以下操作:
ROW_NUMBER() OVER (ORDER BY (SELECT 1)) as rn