如何使用TSQL窗口函数对连续相同值的行分组并生成连续编号
TSQL连续相同值分组编号实现方案
你需要实现的是SQL领域典型的连续相同值(孤岛)分组场景,以下是可直接运行的TSQL实现代码:
WITH CTE AS ( SELECT Col1, Col2, CASE WHEN LAG(Col2) OVER(ORDER BY Col1) = Col2 THEN 0 ELSE 1 END AS GroupFlag FROM ( SELECT 1 Col1, 0 Col2 UNION SELECT 2,0 UNION SELECT 3,1 UNION SELECT 4,1 UNION SELECT 5,0 UNION SELECT 6,1 UNION SELECT 7,1 UNION SELECT 8,1 UNION SELECT 9,0 UNION SELECT 10,1 ) a ) SELECT Col1, Col2, SUM(GroupFlag) OVER(ORDER BY Col1 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS NewColumn FROM CTE ORDER BY Col1
实现逻辑
- 用
LAG窗口函数获取按Col1排序后上一行的Col2值,和当前行Col2对比:值相同则标记为0,值不同(包括第一行无上一行的场景)则标记为1,代表新分组的起点 - 用
SUM窗口函数对标记值做累计求和,求和范围是从结果集第一行到当前行,累计结果就是连续递增的分组编号,和你要求的输出完全一致。
内容的提问来源于stack exchange,提问作者user3469285
相关产品推荐
相关产品推荐

