red*_*alx 12 order-by sql-server-2008-r2
例如考虑 SQL 查询:
SELECT
A.[Name],
ROW_NUMBER() OVER(ORDER BY A.[Name] ASC)
FROM
[FooTable] AS A
Run Code Online (Sandbox Code Playgroud)
在这里,我观察到按 A.[Name] 排序的返回结果。如果我将 ROW_NUMBER 函数中定义的排序列更改为另一列,那么结果将再次按该列排序。
我希望将行号分配给行,但我不希望这些行按照相同的标准进行排序。这仅仅是查询执行方式的副作用(在我的情况下是在 SQL Server 2008 R2 上)还是这种行为是否有保证?(我找不到这样的保证的参考)。
Rem*_*anu 23
绝对不。证明:
SELECT
A.[Name],
ROW_NUMBER() OVER(ORDER BY A.[Name] ASC),
ROW_NUMBER() OVER(ORDER BY A.[Name] DESC)
FROM
[FooTable] AS A
Run Code Online (Sandbox Code Playgroud)
在 SQL 中保证顺序的唯一方法是请求它, ORDER BY
在结果本身上使用。
Aar*_*and 15
如果你问了这个问题,我想你实际上是想问:
如何在
ROW_NUMBER()
不重复复杂ORDER BY
表达式的情况下进行排序?
我们可以告诉您为ROW_NUMBER()
表达式创建一个别名,然后使用别名进行排序:
SELECT
A.[Name],
rn = ROW_NUMBER() OVER (ORDER BY <complex expression>)
FROM
dbo.[FooTable] AS A
ORDER BY rn;
Run Code Online (Sandbox Code Playgroud)
现在您只需在一处更改表达式,结果排序将基于该表达式而无需重复。
归档时间: |
|
查看次数: |
10614 次 |
最近记录: |