我尝试在多个列上执行Rollup,然后在汇总过程的每个阶段/部分应用排名。结果应该类似于以下内容:
Select ColA, ColB, ColC, RankingCriteria
From table
Group By Rollup(ColA, ColB, ColC)
因此,您可以看到每个分组都有自己的排名。
这方面的基本Rollup-Query很简单,但排名令我头疼,而且我对如何实现这个目标的想法不足。
{{1}}
问题在于我不能使用正常的Rank()(Partition by ...),因为没有我可以使用的分区可以处理整个事情。
答案 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语句。