sql - 使用 ROW_NUMBER() OVER 十进制列时未确定的排序顺序

标签 sql sql-server sql-server-2008 pager

我在 sql server 2008 中有一个非常奇怪的错误:

为了在 CRUD 应用程序详细信息 View 中显示寻呼机,我发出一个 sql 请求以获取相对于当前的上一条和下一条记录,它运行良好,除了在 DECIMAL 列上排序时,我可以将问题减少到该查询(FTE 是十进制) (18,2)):

WITH [IndexedRows] AS (
    SELECT 
        [ContactId], 
        [ContactCode],
        [FTE],
        [EmployeeName], 
        ROW_NUMBER() OVER ( ORDER BY [FTE] ASC ) AS [RowIndex]
    FROM   
        [Vw_HrEmployee]
)

/* 1. I can see ContactId 1109 is rowindex 7 */
/*SELECT * FROM [IndexedRows];*/

/* 2. Get the RowIndex, it returns 7 */
/*SELECT [RowIndex] 
FROM   [IndexedRows] 
WHERE  [ContactId] = 1109;*/

/* 3. Why it doesn't returns ContactId 1109 ??? */
SELECT [ContactId], 
       [EmployeeName] 
FROM   [IndexedRows] 
WHERE [RowIndex] = 7;

我得到了另一个具有相同 FTE 值的人的 contactId,但我不明白为什么 WHERE rowindex 不返回正确的行(如果我显示 IndexedRows,它看起来不错!)。

我不认为它是相关的,但 Vw_HrEmployee 是一个 View 。

欢迎任何帮助/想法/解决方法来解决这个问题,

提前致谢

最佳答案

这是一个猜测,但如果您有 FTE 的重复值值,则无法保证每次运行代码时它们会以何种顺序出现。 SQL Server 可能会在您执行简单的操作之间更改查询计划 SELECT和一个 SELECTWHERE标准,导致出现不同的顺序以及您所看到的内容。

我会把PK加到你的ORDER BY的末尾只是为了确保排序始终一致。

关于sql - 使用 ROW_NUMBER() OVER 十进制列时未确定的排序顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7919325/

相关文章:

sql server - 加入空值

时间:2018-01-08 标签:c#sql: get auto incrementing id after inserting data

mysql - 在 MySQL 中,如何将 count(*) 显示为 0 而不是根本不显示该行?

SQL Server 存储过程参数类型转换

sql-server - 如何在 SQL Server 字符串中查找和显示模式的所有实例?

sql - 在 SQL 中格式化表结果

sql-server-2008 - Bing Maps API-SQL-几何与地理类型

sql - 我可以在 SQL 的聚合函数中包含非聚合列而不将其放入 GROUP BY 子句中吗?

mysql - 与 wp_postmeta 连接的 wp_posts 内部的 Wordpress 慢速查询

sql-server - SQL Server 2012 : Backup restore from a compressed backup