Получить запись из нескольких записей на основе строки столбца - PullRequest
0 голосов
/ 29 января 2020

У меня есть следующая таблица:

Employee_Activity_Table Мне нужно создать запрос, чтобы я мог получить следующий результат (только выделенные записи):

ResultRequired Я пытался использовать что-то вроде ниже, но все еще получаю все записи, а не только выделенные.

Select  EmpPk as [User EmpPK],
Activity_PK  as [Activity PK],
Attempt_Start_Date as [Attempt Start Date],
Attempt_Completion_Date as  [Attempt Completion Date],
Registration_Status as  [Registration Status],
Attendance_Status as    [Attendance Status],
EstCrdHrs 
From Employee_Activity                          
Where   ((Attendance_Status='In Progress' AND Registration_Status ='In Progress') 
OR (Attendance_Status='Attended' AND Registration_Status ='Completed'))         

1 Ответ

0 голосов
/ 29 января 2020

Вы точно не описали логи c, которые вы хотите реализовать.

Я понимаю, что для каждого EmpPk вам нужны записи, где attendance_status = 'Attended' and registration_status = 'Completed'; если такой записи нет, вам нужны все остальные записи.

Если это так, вы можете написать это с помощью not exists:

select t.*
from employee_activity ea
where 
    (
        ea.attendance_status = 'Attended' 
        and ea.registration_status = 'Completed'
    ) or not exists (
        select 1 
        from employee_activity ea1 
        where 
            ea1.empPk = ea.empPk 
            and ea1.attendance_status = 'Attended' 
            and ea1.registration_status = 'Completed'
    )

Вы также можете использовать оконные функции:

select *
from (
    select 
        t.*,
        rank() over(
            partition by empPk 
            order by case when attendance_status = 'Attended' and registration_status = 'Completed' then 1 else 2 end
        ) rn
    from employee_activity
) t
where rn = 1

Предложение order by оконной функции rank() ставит «завершенную» запись каждого сотрудника первой; затем внешний фильтр запросов в верхних рейтинговых записях на сотрудника (если нет «полной» записи, тогда все остальные записи того же клиента будут ранжироваться первыми).

...