Непонятно, как вы хотите связать домашнего игрока с выездным игроком.Но при условии, что вас это не волнует, вам может понадобиться следующее:
WITH game_p AS (SELECT team_id, player_id, player_name, game_cd
, ROW_NUMBER() over (PARTITION BY team_id, game_cd ORDER BY player_id) pos
, dense_rank() over (PARTITION BY game_cd ORDER BY team_id) team_pos
FROM game)
SELECT NVL(f1.game_cd, f2.game_cd) AS game_cd
, f1.Team_id as home_team
, f1.player_id as home_plr_id
, f1.player_Name as home_player
, f2.Team_id as away_team
, f2.player_id as away_plr_id
, f2.player_Name as away_player
FROM (SELECT * FROM game_p WHERE team_pos = 1) f1
FULL JOIN (SELECT * FROM game_p WHERE team_pos = 2) f2
ON f1.game_cd = f2.game_cd
AND f1.pos = f2.pos
Новый столбец POS
дает любому игроку каждой команды возможность связать их с другими игроками.команда.Новый столбец TEAM_POS
предназначен для отображения team_id на значения 1 и 2, поскольку значения team_id могут различаться в зависимости от игры.
Наконец, выполните FULL JOIN
, чтобы получить окончательный список.Если количество игроков всегда одинаково для обеих команд, вы можете вместо этого сделать нормальное объединение ...