给出以下数据集
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
;