我有下面的示例数据,我想按如下顺序添加列“sort_key”,如下所示:
employee_ID first_name last_name Supervisor_ID sort_key
580 Vick White 583 3
585 Jonathan Brown 580 4
465 Jordan Mistry 585 5
627 Rogan Jacob 465 6
628 Tad Max 465 6
583 Logan Fi 81 2
81 Fara Jake 8 1
8 Raj Xhi NULL 0
基本上,我想遵循这样的逻辑:每个员工的sort_key都应该是他们主管的sort_key + 1。因此,没有任何主管(即,最高级别)的员工将具有0 sort_key,然后下面的员工将相应地获得他们的sort_key。
我试图写case语句,但不明白在else子句中写什么:
Case
When supervisor_id = NULL then 0
Else
(...) + 1
End as sort_key
我如何才能达到预期的效果?
1条答案
按热度按时间mec1mxoz1#
单靠一个案例陈述是不够的。
在Postgresql中,你需要的是一个递归的CTE(公共表表达式)。
此示例类似于Postgresql文档中的“广度优先搜索”示例。