我有一个包含两列的表格:
stg source id, parent id
125, 124
126, 125
127, 125
128, 127
我想要的最终结果是:
parent id, stg_source_ids
124, [125, 126, 127, 128]
作为另一个视图中我的最后一行。
我正在尝试使用递归 cte 来解决这个问题
WITH RECURSIVE ParentChildHierarchy AS (
SELECT pr.parent_id, pr.stg_source_id,
ARRAY_CONSTRUCT(pr.stg_source_id) AS stg_source_ids
FROM pr
WHERE NOT EXISTS (SELECT 1 FROM pr as pr2 WHERE
pr2.stg_source_id = pr.parent_id)
UNION ALL
SELECT pr.parent_id, pr.stg_source_id,
array_append(p.stg_source_ids, pr.stg_source_id)
FROM pr JOIN ParentChildHierarchy p
ON pr.parent_id = p.stg_source_id
)
这个产品 结果如:
124 -- [125]
125 -- [125, 126]
125 -- [125, 127]
127 -- [127, 128]
您可以尝试Snowflake中的listagg函数,
WITH CTE as (
SELECT pr.parent_id, pr.stg_source_id
FROM pr
WHERE NOT EXISTS (SELECT 1 FROM pr as pr2 WHERE
pr2.stg_source_id = pr.parent_id)
union all
Select a.parent_id, b.stg_source_id
from CTE a inner join pr b on a.stg_source_id=b.parent_id
)Select parent_id, LISTAGG(stg_source_id, ',') WITHIN GROUP(ORDER BY stg_source_id) AS child
from CTE;
它将 stg_source_id 聚合到一个数组中