我在這裏有一個有序的表,Parent_Flag列告訴你哪一行是父級,下一個子級將放在同一個組中。 如何在SQL中創建desired_result列?SQL根據父行生成組號
實施例:
ID Parent_Flag Desired_Result
001 P 1
001 C 1
001 C 1
002 P 2
002 C 2
002 P 3
我在這裏有一個有序的表,Parent_Flag列告訴你哪一行是父級,下一個子級將放在同一個組中。 如何在SQL中創建desired_result列?SQL根據父行生成組號
實施例:
ID Parent_Flag Desired_Result
001 P 1
001 C 1
001 C 1
002 P 2
002 C 2
002 P 3
對於SQL服務器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 |
+---+-----+-------------+-----+------+
這正是我所需要的。非常感謝SqlZim :) – user7799067
@ user7799067樂於幫忙! – SqlZim
MySQL或SQL服務器? – SqlZim
sql-server。謝謝! – user7799067
我想你可能需要一個更好的例子,因爲這個沒有太大意義(至少對我來說)。 – SqlZim