Найти, если сотрудник является менеджером - PullRequest
0 голосов
/ 02 ноября 2019

У меня есть 2 таблицы employee и employeeManager.

Employee таблица имеет 3 столбца:

employeeId (pk), firstname, lastname

EmployeeManager таблица имеет 5 столбцов:

employeemanagerid (PK), 
employeeid (FK references employee > employeeid), 
managerid  (FK references employee > employee id), 
effectivestartdate,
effectiveenddate

Мне нужно отобразить записи как

Employeeid, firstname, lastname, isManager

Столбец IsManager может иметь 2 значения: Y для да и N для нет.

Мне нужно найти статус на сегодняшний день. IE на день запускается запрос.

Любая помощь?

Ответы [ 2 ]

1 голос
/ 02 ноября 2019

Этот подзапрос:

select distinct managerid
from employeemanager
where convert(date, getdate()) between effectivestartdate and effectiveenddate 

возвращает всех менеджеров. Соедините таблицу employee слева с этим подзапросом и с помощью выражения CASE получите нужные вам результаты:

select e.*, 
  case when t.managerid is null then 'N' else 'Y' end isManager
from employee e left join (
  select distinct managerid
  from employeemanager
  where convert(date, getdate()) between effectivestartdate and effectiveenddate 
) t on t.managerid = e.employeeid
1 голос
/ 02 ноября 2019

Предположительно, у вас есть правило, согласно которому у менеджера есть люди, подотчетные ему или ей. Это не так в реальном мире, но это необходимо для ответа на ваш вопрос.

В основном вам нужно предложение exists, чтобы увидеть, существует ли кто-то, кто отчитывается перед менеджером. Это выглядит так:

select e.*,
       (case when exists (select 1
                          from employeemanager m
                          where m.managerid = e.employeeid and
                                m.effectivestartdate <= getdate() and
                                m.effectiveenddate > getdate()
                         )
             then 'Y' else 'N'
        end) as isManager
from employee e;
...