Получить номер строки результата в правильном порядке? - PullRequest
0 голосов
/ 22 января 2020

У меня есть запрос на получение JobRanking на основе yearleftpost для получения последней работы, за которой следуют предыдущие рабочие места.

select
    c.id,
    c.Fname,
    cfe.JobYear,
    cfe.YearLeftPost,
    cfe.Iscurrentjob,                                         
    ROW_NUMBER() OVER (Partition by c.id ORDER BY Iscurrentjob DESC, yearleftpost DESC) AS JobRanking
from
candidates c
left join Candidate_FunctionalExperience cfe on c.id = cfe.CandidateID

Это дает мне результат:

id  Fname    JobYear  YearLeftPost  Iscurrentjob JobRanking
EC2 sdsadsa  1430     1433              1           1
EC2 sdsadsa  1429     1430              0           2
EC2 sdsadsa  1424     1428              0           3
EC2 sdsadsa  1428     1428              0           4
EC2 sdsadsa  1424     1426              0           5

Теперь я IscurrentJob (логическое значение) 0 или 1, я не получаю правильный порядок JobRanking.

Ответы [ 3 ]

1 голос
/ 22 января 2020

Если вы хотите, чтобы Iscurrenjjob=1 строк были первыми в рейтинге, добавьте это к вашему предложению заказа:

Partition by c.id ORDER BY Iscurrentjob DESC, yearleftpost DESC
0 голосов
/ 22 января 2020

С условной сортировкой:

ROW_NUMBER() OVER (
  Partition by c.id 
  ORDER BY CASE WHEN cfe.Iscurrentjob = 1 THEN 0 ELSE 1 END, yearleftpost DESC
) AS JobRanking
0 голосов
/ 22 января 2020

Это должно сделать работу.

 select
    c.id,
    c.Fname,
    cfe.JobYear,
    cfe.YearLeftPost,
    cfe.Iscurrentjob,                                         
    ROW_NUMBER() OVER (order by c.id) AS JobRanking
 from
 candidates c
 left join Candidate_FunctionalExperience cfe on c.id = cfe.CandidateID
 ORDER BY cfe.Iscurrentjob desc, cfe.YearLeftPost desc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...