gpt4 book ai didi

sql - 如何获得员工职能的首要地位?

转载 作者:行者123 更新时间:2023-12-04 23:45:27 25 4
gpt4 key购买 nike

我有以下查询以获取员工的所有功能和相关范围(公司):

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


当雇员对一个公司拥有一项主要职能时,sortOrder的逻辑为/最小值获得主要职能。在这种情况下,EmployeeId = 54对于CompanyId = 8,19,32,151的不同公司(范围)具有相同的主要功能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

最佳答案

您可以使用窗口函数来计算SortOrderPrimacy列,如下所示:

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。然后,外部查询使用该信息生成序列号,并对组进行排名。请注意,排序顺序是由查询计算的-您不需要(或想要)存储此派生的信息:如果插入了新记录,则可能需要在整个列上重新分配新值。

Demo on DB Fiddle

员工编号| FunctionId | CompanyId |排序|首要性
---------:| ---------:| --------:| :-------- | :--------
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 |第四

关于sql - 如何获得员工职能的首要地位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60170523/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com