我的表看起来像这样:
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 ............................
我怎样才能做到这一点?非常感谢你!
我只想使用条件聚合:
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()
。
你可以试试
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
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