我有一个返回一些父记录和子记录的查询。 我想返回每个孩子记录一个增量的唯一ID。 因此,如果我有3个孩子的记录,1个有2个孩子的记录想要返回。
Parent/Child | Parent_id | Child_id
1. Parent record, Parent_id, 0
2. child_record, Parent_Id, 1
3. child_record, Parent_Id, 2
4. child_record, Parent_Id, 3
5. Parent record, Parent_id, 0
6. child_record, Parent_Id, 1
7. child_record, Parent_Id, 2
有关如何从1生成child_id并按1递增然后再次为下一批子记录重置的任何想法?
答案 0 :(得分:0)
此查询会生成与其父ID无关的子编号:
select id_pk -- pk; defines global sort order
, p_c -- node type ('parent', 'child')
, p_id -- parent id
, row_number() over ( partition by p_id order by id_pk ) - 1 c_id
-- synthetic child id.
from test_pc
;
根据需要在order by子句中调整排序标准。
示例:(孩子们之间的顺序并不重要,只需要一个唯一的本地ID)
, row_number() over ( partition by p_id order by p_id, p_c desc ) - 1 c_id