У меня есть следующий запрос, чтобы получить первенство для сотрудника:
with
employeeScopeFunctions as (
select e.employeeId,
es.FunctionId,
ef.Label,
c.CompanyName
,es.SortOrder
from employee e
LEFT JOIN employee_scope es on es.employeeId = e.employeeId
LEFT JOIN employee_function ef on es.FunctionId = ef.FunctionId
LEFT JOIN Company c ON es.CompanyId = c.ID
WHERE e.EmployeeId=54
)
SELECT DISTINCT esf.EmployeeId, esf.FunctionId
,STUFF((SELECT ',' + CompanyName
FROM employeeScopeFunctions es
WHERE esf.EmployeeId=es.EmployeeId AND esf.FunctionId=es.FunctionId
FOR XML PATH('')),1,1,'') AS Companies
,SUM(esf.SortOrder) as sumOrder
FROM employeeScopeFunctions esf
GROUP BY esf.EmployeeId,esf.FunctionId
Мой вывод такой, как показано ниже:
EmployeeId FunctionId Label CompanyName sumOrder
54 39 Director C1,C2,X5 224
54 273 Group Chief Executive Officer X6,F6 66
54 897 Group Regional Chief Executive Officer VY,G7 130
То, что я хочу, это получить первичность (основной,вторичный, третичный) для каждой функции, как показано ниже:
EmployeeId FunctionId Label CompanyName sumOrder primacy
54 39 Director C1,C2,X5 224 tertiary
54 273 Group Chief Executive Officer X6,F6 66 primary
54 897 Group Regional Chief Executive Officer VY,G7 130 secondary
Функция с минимальным sumOrder будет основной функцией и т. д.