根据连续匹配的记录在 SQL 条记录中标记组

Label groups in SQL records based on consecutive matching records

给定以下数据集

CREATE TABLE #temp
 ( A NUMERIC,
   B NUMERIC )

INSERT INTO #temp VALUES (243184, 0);
INSERT INTO #temp VALUES (240719, 0);
INSERT INTO #temp VALUES (236482, 1);
INSERT INTO #temp VALUES (230777, 0);
INSERT INTO #temp VALUES (226023, 0);
INSERT INTO #temp VALUES (222522, 0);
INSERT INTO #temp VALUES (214977, 1);

SELECT *
  FROM #temp
 ORDER BY A DESC

A                                       B
--------------------------------------- ---------------------------------------
243184                                  0
240719                                  0
236482                                  1
230777                                  0
226023                                  0
222522                                  0
214977                                  1

如何获得以下输出?

A                                       B                                       C
--------------------------------------- --------------------------------------- ----
243184                                  0                                       1
240719                                  0                                       1
236482                                  1                                       2
230777                                  0                                       3
226023                                  0                                       3
222522                                  0                                       3
214977                                  1                                       4

我想在按降序值排序时,根据 'A' 的值将 [B] 记录的连续实例分组。

因此,每次 [B] 从 0 翻转到 1 时,都会开始一个新的组

有什么想法吗?

请试试这个:

SELECT s.A, s.B
    ,SUM(s.IsChange) OVER (ORDER BY s.A DESC ROWS UNBOUNDED PRECEDING) +1 AS [C]
FROM (
    SELECT t.A,t.B
        ,CASE WHEN t.B <> LEAD(t.B)OVER(ORDER BY t.A) THEN 1 ELSE 0 END AS [IsChange]
    FROM #temp t
) s
ORDER BY s.A DESC
;