首页 > 解决方案 > MS ACESS 按多个标准对列进行排名

问题描述

我正在尝试使用排名值创建查询。

我有一张这样的桌子

Ref  lenght  qty order
A     1000   2   order1
A     1200   1   order2
B     2000   1   order3
C     500    1   order4

排名应该是

Ref  lenght  qty order  rank
A     1000   2   order1  2
A     1200   1   order2  2
B     2000   1   order3  1
C     1100    1   order4 3

对于我的等级,只分析订单的最大价值。

我真的很陌生,但工作需要这个。

任何帮助

标签: sqlms-accessrank

解决方案


大概,您想要基于 的排名length。这在几乎任何其他数据库中都会更简单,但在 MS Access 中,您可以使用:

select t.*, o2.ranking
from (select o.*,
             (select count(*)
              from (select max(length) as max_length
                    from order as o2
                    group by o2.order
                   ) as o2
              where o2.max_length >= o.max_length
             ) as ranking
      from (select order, max(length) as max_length
            from t
            group by order
           ) as o
     ) as o2 join
     t
     on o2.order = t.order;

注意:我只能希望这可以按照您希望的方式处理最大长度的关系。修改该逻辑将非常棘手。

相比之下,在任何合理的数据库中,您都会使用:

select t.*,
       dense_rank() over (order by max_length desc) as ranking
from (select t.*,
             max(length) over (partition by order) as max_length
      from t
     ) t;

对我来说,这似乎是切换数据库的好理由。


推荐阅读