基于连续匹配记录的SQL记录中的标签组

问题描述 投票:1回答:1

给出以下数据集

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时,都会开始一个新的组

有什么想法吗?

tsql sql-server-2014
1个回答
0
投票

请尝试以下方法:

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
;
© www.soinside.com 2019 - 2024. All rights reserved.