我这里有一个有序的表,Parent_Flag列告诉你哪一行是父级,后面的子级将放在同一个组中。 如何在SQL中创建desired_result列?
示例:
ID Parent_Flag Desired_Result
001 P 1
001 C 1
001 C 1
002 P 2
002 C 2
002 P 3
答案 0 :(得分:1)
对于SQL Server 2012 +:
使用条件聚合窗口函数sum()
或count()
和over()
:
注意:我在示例数据中添加了identity
列,以获取行的顺序。
select *
, grp = sum(case when Parent_flag = 'P' then 1 else 0 end) over (order by i)
, cgrp = count(case when Parent_flag = 'P' then 1 end) over (order by i)
from t
rextester演示:http://rextester.com/SMLN40470
返回:
+---+-----+-------------+-----+------+
| i | id | parent_flag | grp | cgrp |
+---+-----+-------------+-----+------+
| 1 | 001 | P | 1 | 1 |
| 2 | 001 | C | 1 | 1 |
| 3 | 001 | C | 1 | 1 |
| 4 | 002 | P | 2 | 2 |
| 5 | 002 | C | 2 | 2 |
| 6 | 002 | P | 3 | 3 |
+---+-----+-------------+-----+------+