SQL 当前一个 id 列为空时重置 row_number

SQL reset row_number when previous id column null

这很难解释,所以我举个例子。 我需要 SQL(ms 服务器),我假设它在分区上有 row_number 但无法让它工作。

我有这个 table:

ID PreviousID Data
1 a
2 1 b
3 2 c
4 d
5 4 e
6 f

我想要这些结果:

ID NewID Data
1 1 a
2 1 b
3 1 c
4 2 d
5 2 e
6 3 f

另一个只有每个序列的新 ID:

NewID Data
1 a
2 d
3 f

除了行号 new id,它还可以有序列的第一个 id,只要它能标识序列,哪个更容易。

您似乎想要窗口 COUNT 行,其中 PreviousID 的值为 NULL

SELECT ID,
       COUNT(CASE WHEN PreviousID IS NULL THEN 1 END) OVER (ORDER BY ID) AS NewID,
       Data
FROM dbo.YourTable;