2017-03-31 35 views
1

我在這裏有一個有序的表,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 
+3

MySQL或SQL服務器? – SqlZim

+0

sql-server。謝謝! – user7799067

+0

我想你可能需要一個更好的例子,因爲這個沒有太大意義(至少對我來說)。 – SqlZim

回答

1

對於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 | 
+---+-----+-------------+-----+------+ 
+0

這正是我所需要的。非常感謝SqlZim :) – user7799067

+0

@ user7799067樂於幫忙! – SqlZim