У меня есть 3 таблицы
Employees EmployeePossitionsOverYears Position
- Id - EmployeeId - Id
- Firstname - Year - Name
- LastName - PositionId
Мне нужно выбрать список сотрудников с их должностями.
Если должность сотрудника не меняется с годами (каждая строка таблицы EmployeePossitionsOverYears где EmployeeId = 1 PossitionId = 6) Мне нужно выбрать только название должности.
Но если должность сотрудника меняется (по крайней мере, один из PositionId не похож на другие, где EmployeeId = 3), мне нужно выбрать все должности имена с соответствующими годами для этого сотрудника в один столбец nvarchar
.
Я действительно не могу присоединить таблицу EmployeePossitionsOverYears к таблице сотрудников, потому что это приводит к тому, что одни и те же сотрудники выбираются несколько раз.
Я пробовал использовать CASE в чем-то вроде
select
PositionText =
CASE
(select count(*) from
(select Distinct EmployeeId, PositionId from EmployeePossitionsOverYears where EmployeeId = Employees.Id))
Но это не работает, потому что я все еще не могу выбрать, не присоединяясь к таблице EmployeePossitionsOverYears.
Как мне выбрать только 1 позицию name, если все PositionIds одинаковы для данного сотрудника, но выберите все названия должностей + их лет, если в одном столбце есть как минимум 2 разных PositionIds без дополнительных строк, тогда есть сотрудники?
Пример:
Сотрудники
Id FirstName LastName
1 First Emp
2 Second Worker
3 Third Person
EmployeePossitionsOverYears
EmployeeId Year PositionId
1 2010 1
1 2011 1
1 2012 1
2 2010 1
2 2011 2
2 2012 3
3 2010 1
3 2011 2
3 2012 1
Позиция
Id Name
1 Junior
2 Middle
3 Senior
Ожидаемый результат:
FirstName LastName position
- First - Emp - Junior
- Second - Worker - 2010_Junior, 2011_Middle, 2012_Senior
- Third - Person - 2010_Junior, 2011_Middle, 2012_Junior