基于列值的SQL排名



我需要根据表中的列值进行排名

条件:

  • 按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

上面的查询对我有效,我正在测试它。

相关内容

  • 没有找到相关文章

最新更新