RANK() - 一个查询中的多个列

时间:2015-05-28 02:28:44

标签: sql sql-server

我一直在努力查询,我必须在一个查询中为几个不同的列创建一个排名维度。

我尝试多次添加RANK() OVER子句,但似乎不能在查询中使用大于1的子句。

示例:

John - Sales program A: 10000 - Sales program B: 123 - Sales program C: 585
Maria - Sales program A: 500 - Sales program B: 123213 - Sales program C: 432

我需要3个列,每个销售计划的等级。

1 个答案:

答案 0 :(得分:2)

对于您喜欢的任何列,您可以拥有多个rank()运算符。问题/示例数据非常模糊,但您可以这样做:

select
  person,
  A,
  rank() over (order by A) as A_RANK,
  B,
  rank() over (order by B) as B_RANK,
  C,
  rank() over (order by C) as C_RANK
from
  sales

如果数据不同,例如A,B和C在不同的行而不是列中,您可以使用例如使用PIVOT将行转换为列的CTE。

这也是SQL Fiddle中的例子。