mysql将游戏id和玩家列表转换为列

nzrxty8p  于 2022-11-21  发布在  Mysql
关注(0)|答案(1)|浏览(190)

查询...

select match_id, player
from player_matches

产生的结果...

match_id  player
1         messi
1         lebron
2         kobe
2         federer
3         serena
3         woods

我想把这个转换成...

match_id  player_1  player_2
1         messi     lebron
2         kobe      federer
3         serena    woods

对于每个游戏的固定玩家数量(例如,每个游戏10个玩家,产生11列),我如何实现这一点?

uqzxnwby

uqzxnwby1#

我相信有一个动态的SQL答案会更好地满足您的需求,但下面是您如何使用MAX硬编码多个行号来将行转换为列:

WITH CTE AS 
(SELECT *, 
  ROW_NUMBER() OVER (PARTITION BY match_id ORDER BY match_id) AS RN
  FROM player_matches)
SELECT 
  match_id,
  MAX(CASE WHEN rn = 1 THEN player END) AS player_1,
  MAX(CASE WHEN rn = 2 THEN player END) AS player_2,
  MAX(CASE WHEN rn = 3 THEN player END) AS player_3,
  MAX(CASE WHEN rn = 4 THEN player END) AS player_4,
  MAX(CASE WHEN rn = 5 THEN player END) AS player_5,
  MAX(CASE WHEN rn = 6 THEN player END) AS player_6,
  MAX(CASE WHEN rn = 7 THEN player END) AS player_7,
  MAX(CASE WHEN rn = 8 THEN player END) AS player_8,
  MAX(CASE WHEN rn = 9 THEN player END) AS player_9,  
  MAX(CASE WHEN rn = 10 THEN player END) AS player_10
FROM CTE a
GROUP BY match_id

结果:

| match_id | player_1 | player_2 |
|----------|----------|----------|
| 1        | messi    | lebron   |
| 2        | kobe     | federer  |
| 3        | serena   | woods    |

演示here .

相关问题