SQL:在多列上分别对Rollup进行排序

时间:2015-07-21 21:26:53

标签: sql rank rollup

我尝试在多个列上执行Rollup,然后在汇总过程的每个阶段/部分应用排名。结果应该类似于以下内容:

Select ColA, ColB, ColC, RankingCriteria
From table
Group By Rollup(ColA, ColB, ColC)

因此,您可以看到每个分组都有自己的排名。

这方面的基本Rollup-Query很简单,但排名令我头疼,而且我对如何实现这个目标的想法不足。

{{1}}

问题在于我不能使用正常的Rank()(Partition by ...),因为没有我可以使用的分区可以处理整个事情。

1 个答案:

答案 0 :(得分:1)

我认为这会产生你想要的东西:

SELECT r.*,
       row_number() over (partition by (case when colb is null and colc is null and cola is not null
                                             then 1 else 0 end),
                                       (case when colb is null and colc is null and cola is not null
                                             then NULL else A end),
                                       (case when colb is null and colc is null and cola is not null
                                             then NULL else B end)
                         order by RankingCriteria desc) as seqnum                           
FROM (Select ColA, ColB, ColC, RankingCriteria
      From table
      Group By Rollup(ColA, ColB, ColC)
     ) r;

我读取逻辑的方式是A和B的分区适用于除第二组之外的所有分区。这就是为什么它使用三个case语句。