2015-05-28 50 views
0

我一直在努力尋找一個查詢,我必須爲幾個不同的列創建一個排名維度到一個查詢中。RANK() - 一個查詢中的多列

我試着添加多次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列,每個銷售項目的排名。

回答

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