gpt4 book ai didi

sql - 如何为 sql select 生成序列号,为后代项目提供子编号?

转载 作者:行者123 更新时间:2023-12-04 07:21:05 26 4
gpt4 key购买 nike

我想为 select 生成序列号,为后代项目提供子编号。
我希望数字是以下格式:

  • 根:1...n
  • 根的 child :1.1 -> 1.n
  • 子 child :1.1.1 -> 1.1.n
  • 等等...

  • 我有一个 Item 表,它有一个 owner_ref 外键
    表:(项目名称只是一个例子,它可以是任何东西)
     id | item_name  | parent_id | owner_ref_id 
    ----|------------|-----------|--------------
    1 | item_1 | null | 1
    2 | item_1.1 | 1 | 1
    3 | item_1.1.1 | 2 | 1
    4 | item_2 | null | 1
    5 | item_2.1 | 4 | 1
    6 | item_2.2 | 4 | 1
    --------------------------------------------
    结果应该如下所示:

    seq_num | item_name | parent_id | owner_ref_id
    ---------|------------|-----------|--------------
    1 | item_1 | null | 1
    1.1 | item_1.1 | 1 | 1
    1.1.1 | item_1.1.1 | 2 | 1
    2 | item_2 | null | 1
    2.1 | item_2.1 | 4 | 1
    2.2 | item_2.2 | 4 | 1
    --------------------------------------------

    最佳答案

    使用递归CTE形成树状结构——

    with recursive nodes(id,item_name, parent_id,lvl, path) as (
    select id,item_name, parent_id, 1
    , row_number() OVER (order by parent_id nulls first)::text as path
    from items where parent_id is null
    union all
    select o.id,o.item_name, o.parent_id,n.lvl+1, n.path || '.' ||
    row_number() OVER (partition by o.parent_id order by o.parent_id)::text
    from items o
    join nodes n on n.id = o.parent_id
    )
    select *
    from nodes
    order by id
    View on DBFiddle

    关于sql - 如何为 sql select 生成序列号,为后代项目提供子编号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68497459/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com