【发布时间】:2020-05-18 11:21:11
【问题描述】:
我有一个表,其中有 4 列,即:Book_no,Prev_Book_no(上一版 book_no),Edition_no(从 0 开始到最新版 no(以 1 递增)),Tree(最初为 null)。
我打算做的是从最高版本到第0版创建一棵Book_no树。
例如: (Book_no,Prev_Book_no,Edition_no) 值: (bbb,null,0), (ccc,bbb,1), (ddd,ccc,2), (eee,ddd,3), (fff,eee,4)
那么每一行的树应该是:(bbb),(ccc,bbb),(ddd,ccc,bbb),(eee,ddd,ccc,bbb) 和 (fff,eee,ddd,ccc,bbb) .
为此,我尝试使用递归 CTE,代码如下:
with cte(book_no,prev_book_no,tree,edition_no) as
(select
book_no,prev_book_no,tree,edition_no
from books
where edition_no>=0
union all
select e.book_no,e.prev_book_no,concat(nvl(e.tree,''),','+e.prev_book_no),e.edition_no
from
cte e inner join books f
on e.prev_book_no=f.book_no
)
select distinct * from cte
order by edition_no;
但是 Redshift 不允许在 from 子句中使用 cte table 并给出错误。 '表 cte 不存在'。
P.S 表中有多种不同的书。例如我只提到了一本。
在 Redshift 中是否有任何替代方案?
编辑:
样本数据:
预期输出:
逻辑:我想获得书号的层次结构,并且正在使用 concat 操作。(当前代码可能是错误的) 谢谢!
【问题讨论】:
-
请提供示例数据、期望的结果以及您要实现的逻辑的清晰说明。
-
@GordonLinoff 我已经添加了相关图片,并试图解释我打算做什么。
标签: sql amazon-redshift string-concatenation recursive-cte