CTE分区未返回正确的行号 - TSQL

时间:2017-01-19 00:55:54

标签: sql-server tsql

我正在尝试使用CTE将最新文件放入文件列表中。到目前为止,我有这个:

WITH CTE AS
(
    SELECT 
        ID, TRISPATH, Document, 
        ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Document) AS RN
    FROM 
        LinkedDocuments
)
SELECT 
    ID, Document, RN 
FROM 
    CTE 
WHERE 
    TRISPATH IS NOT NULL --AND RN!=1

似乎可以使用它返回我想要的一些ID,但是其中一些(大约30%)不从1开始,它们从基于ID的随机数开始:

14  J:\PRS\CVs\Original CVs\2015\N\*****, ***** CL Oct 15.txt   11
14  J:\PRS\CVs\Original CVs\2015\N\*****, ***** CV Nov 15.pdf   12
14  J:\PRS\CVs\Original CVs\2015\N\*****, ***** CV Oct 15.docx  13

我似乎无法弄清楚为什么会发生这种情况,我确定它与分区有关,但我无法弄清楚是什么。

1 个答案:

答案 0 :(得分:3)

如果你有TRISPATH为空的记录,他们将被分配一个行号,然后在最终选择中过滤掉。

要确保行号从1开始,请将WHERE子句移动到CTE:

WITH CTE AS
(
    SELECT ID, TRISPATH, Document, ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Document) AS RN
    FROM LinkedDocuments
    WHERE TRISPATH IS NOT NULL 
)
SELECT ID,Document, RN FROM CTE