使用不同列的排名

问题描述 投票:0回答:3

我的表看起来像这样:

CITY     TOPIC      RANK
NY       FOOTBALL   1
NY       BASKETBALL 2
....
NY       BASEBALL   10
WS       FOOTBALL   1
....

我想要的是这个:

CITY     TOP 1      TOP 2      ...      TOP 10
NY       FOOTBALL   BASKETBALL ...      BASEBALL
WS       FOOTBALL   ............................

我怎样才能做到这一点?非常感谢你!

sql oracle rank
3个回答
0
投票

我只想使用条件聚合:

select city,
       max(case when rank = 1 then topic end) as top_1,
       max(case when rank = 2 then topic end) as top_2,
       . . . 
       max(case when rank = 10 then topic end) as top_10
from t
group by city;

这假设rank没有联系。如果你有联系,你可能更喜欢listagg()而不是max()


0
投票

你可以试试

SELECT * FROM
(
SELECT City,Topic, 
 'Top '+ cast(Rank as varchar(10)) AS TopRank
 FROM TableName
 ) T
PIVOT 
(
max(topic) 
FOR TopRank IN ([Top 1], [Top 2],[Top 10])
) as pvt

0
投票

MySQL中没有直接的Pivot。您需要在Query中手动创建列。例如

select City, max(case when Rank=1 then TopiC end) as Top1, max(case when Rank=2 then Topic end) as Top2, . . . max(case when Rank=10 then Topic end) as Top10 from Table group by City

© www.soinside.com 2019 - 2024. All rights reserved.