Изменить результат RANK () на основе условий в других столбцах - PullRequest
0 голосов
/ 04 октября 2018

Теперь у меня есть таблица в красном смещении, подобная этой:

Таблица 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. 

Однако она не работает.

Какой процесс необходим для изменения рейтинга на основе других условий в других столбцах?

Большое спасибо!

1 Ответ

0 голосов
/ 04 октября 2018

использовать dens_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
...