我需要根据表中的列值进行排名
条件:
- 按1:75、2:76、3:80、4:64的顺序排列JobType的优先级
- 当有两个联系人具有相同的工作类型时,优先考虑RANK订单计数描述
- 表中还有其他未列出的作业类型
- 如果存在其他作业类型,则应在匹配
以上条件后执行 - 如果客户没有任何匹配的工作类型:75、76、80、64排名应基于OrderCount
- JobType与ContactPerson关联
情况1:案例1案例2:情况2
您发布的是图片而不是代码,但无论如何,使用row_number()
、rank()
或dense_rank()
以及CASE
表达式就可以了。
不是真的遵循你所有的逻辑,而是类似于:
select a.*
, row_number() over (
order by case
when job_type = '1:75' then 1,
when job_type = '2:76' then 2,
when job_type = '3:80' then 3,
when job_type = '4:64' then 4,
else 5 end case,
orderCount desc
) as rnk
from mytable
select a.*, row_number() over
(partition by Market,Customer order by case
when JobType = '75' then 1
when JobType = '76' then 2
when JobType = '80' then 3
when JobType = '64' then 4
else 5 end , orderCount desc) as rnk
from mytable a
上面的查询对我有效,我正在测试它。