更新表格列的排序和分组

时间:2017-07-19 13:23:02

标签: sql oracle plsql

我有一个表W_PHOTO,doc_id为null,我想更新doc_id,group by type_id,但是下一个type_id与新的doc_id不一样,例如

   id      case    type_id     pnum      doc_id
1000001  1000001    2101        20          1
1000002  1000001    2101        40          1
1000003  1000001    2101        60          1
1000004  1000001    106         70          2
1000005  1000001    106         80          2
1000006  1000001    1199        100         3
1000007  1000001    1103        120         4
1000008  1000001    7           140         5
1000009  1000001    106         160         6
1000010  1000001    2103        180         7
1000011  1000001    2105        200         8
1000012  1000001    2106        220         9
1000013  1000001    2104        240         10
1000014  1000001    2202        260         11
1000015  1000001    1104        280         12
1000016  1000001    103         310         13
1000017  1000001    103         320         13
1000018  1000001    103         340         13
1000019  1000001    1199        380         14
1000020  1000001    2104        400         15
1000021  1000001    2104        420         15
1000022  1000001    2104        440         15
1000023  1000001    2104        460         15

1 个答案:

答案 0 :(得分:2)

使用lag将当前行的type_id与前一行进行比较,然后使用运行总和为具有相同type_id值的连续行分配相同的数字。

select t.*,sum(col) over(order by id) as doc_id
from (select t.*,
      case when type_id=lag(type_id) over(order by id) then 0 else 1 end as col
      from t
     ) t