我有一个两列的表格(我们称它为人)
id, parent_id
我想枚举每条记录,但为每条记录分配一个子编号,其中parent_id不为null
id | parent_id| number
1 NULL 1
2 NULL 2
3 2 2.1
4 NULL 3
5 4 3.1
父母应该有连续的数字,顺序是id
,孩子-每个父母以1开头的连续数字。父母可能有很多孩子。但是孩子不能生孩子,所以3.3.3并非如此。实现此目标的最佳方法是什么?
我只是使用窗口函数来做到这一点:
select t.*,
concat_ws('.',
dense_rank() over (order by coalesce(parent_id, id)),
(case when parent_id is not null
then row_number() over (partition by parent_id order by id)
end)
)
from person t
order by id;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句