Sql 如何为员工获得函数的优先权?
我使用以下查询获取员工的所有职能和相关范围(公司):Sql 如何为员工获得函数的优先权?,sql,sql-server,tsql,Sql,Sql Server,Tsql,我使用以下查询获取员工的所有职能和相关范围(公司): SELECT * FROM employee_scope WHERE EmployeeId=54 输出: EmployeeId FunctionId CompanyId SortOrder 54 273 8 1 54 273 19 2 54 273 32
SELECT * FROM employee_scope WHERE EmployeeId=54
输出:
EmployeeId FunctionId CompanyId SortOrder
54 273 8 1
54 273 19 2
54 273 32 3
54 273 151 4
54 897 49 5
54 897 77 6
54 897 54 7
54 333 56 8
54 333 90 9
54 123 78 10
当一名员工为一家公司拥有一项主要职能时,排序器的逻辑是/最小值获取主职能。在这种情况下,EmployeeId=54对于CompanyId=8,19,32151的不同公司(范围)具有相同的主函数ID=273
我想得到每个函数的首要性,如下所示:
EmployeeId FunctionId CompanyId SortOrder Primacy
54 273 8 1 Primary
54 273 19 2 Primary
54 273 32 3 Primary
54 273 151 4 Primary
54 897 49 5 Secondary
54 897 77 6 Secondary
54 897 54 7 Secondary
54 333 56 8 Third
54 333 90 9 Third
54 123 78 10 Fourth
您可以使用窗口函数计算
SortOrder
和Primacy
列,如下所示:
select
EmployeeId,
FunctionId,
CompanyId,
row_number() over(order by minCompanyId, CompanyId) SortOrder,
case dense_rank() over(order by minCompanyId)
when 1 then 'Primacy'
when 2 then 'Secondary'
when 3 then 'Third'
when 4 then 'Fourth'
end Primacy
from (
select
t.*,
min(CompanyId) over(partition by EmployeeId, FunctionId) minCompanyId
from mytable t
) t
内部查询计算每个函数id的最小公司id。然后,外部查询使用该信息生成序列号,并对组进行排序。请注意,排序顺序由查询计算-您不需要(或不希望)存储此派生信息:如果插入新记录,则可能需要在整个列上重新分配新值
:
EmployeeId | FunctionId | CompanyId | SortOrder | Primacy
---------: | ---------: | --------: | :-------- | :--------
54 | 273 | 8 | 1 | Primacy
54 | 273 | 19 | 2 | Primacy
54 | 273 | 32 | 3 | Primacy
54 | 273 | 151 | 4 | Primacy
54 | 897 | 49 | 5 | Secondary
54 | 897 | 54 | 6 | Secondary
54 | 897 | 77 | 7 | Secondary
54 | 333 | 56 | 8 | Third
54 | 333 | 90 | 9 | Third
54 | 123 | 78 | 10 | Fourth
员工ID |函数ID |公司ID |排序器|优先
---------: | ---------: | --------: | :-------- | :--------
54 | 273 | 8 | 1 |优先
54 | 273 | 19 | 2 |优先
54 | 273 | 32 | 3 |优先
54 | 273 | 151 | 4 |优先
54 | 897 | 49 | 5 |中学
54 | 897 | 54 | 6 |中学
54 | 897 | 77 | 7 |中学
54 | 333 | 56 | 8 |三
54 | 333 | 90 | 9 |三
54 | 123 | 78 | 10 |四