现在我在redshift中有一个这样的表:
表Project_team
Employee_ID Employee_Name Start_date Ranking Is_leader Is_Parttime_Staff
Emp001 John 2014-04-01 1 No No
Emp002 Mary 2015-02-01 2 No Yes
Emp003 Terry 2015-02-15 3 Yes No
Emp004 Peter 2016-02-05 4 No No
Emp004 Morris 2016-05-01 5 No No
最初,没有工作人员排名。 我要做的是像这样使用rank()函数:
RANK() over (partition by Employee_ID,Employee_Name order by Start_date) as page_seq
但是,现在我想根据其状态来控制排名。如果员工是领导者,那么他或她应该排在第一位。如果他或她是兼职人员,则应排在最后。该表应如下所示:
Employee_ID Employee_Name Start_date Ranking Is_leader Is_Parttime_Staff
Emp003 Terry 2015-02-15 1 Yes No
Emp001 John 2014-04-01 2 No No
Emp004 Peter 2016-02-05 3 No No
Emp004 Morris 2016-05-01 4 No No
Emp002 Mary 2015-02-01 5 No Yes
我试图使用case函数来像
一样操作它Case when Is_leader = true then Ranking = 1 else RANK() over (partition by Employee_ID,Employee_Name order by Start_date) End as page_seq.
但是它不起作用。
我需要根据其他列中的其他条件更改排名的过程是什么?
非常感谢!
答案 0 :(得分:1)
使用density_rank()
select *,dense_Rank() over(order by case when leader='yes' then 1 else 0 end desc, case when parmanent='yes' then 1 else 0 end)
from cte1
输出:
id name leader parmanent employeerank
1 A yes no 1
3 C no no 2
2 B no yes 3