在sql select语句中生成数字

时间:2016-05-04 08:04:47

标签: sql oracle

我有一个返回一些父记录和子记录的查询。 我想返回每个孩子记录一个增量的唯一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递增然后再次为下一批子记录重置的任何想法?

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