SQL РЕШЕНИЕ КАК исправить запрос sql - PullRequest
0 голосов
/ 08 апреля 2020

У меня есть две таблицы

  1. match_id, цвет, дата и т. Д. c. (Имя: совпадения)

  2. match_id, player_id. et c (namepalyer_matches)

Во втором столе может быть 10 игроков с одинаковым match_id.

Я хочу сделать 1 sql запрос, чтобы получить таблицу типа

match_id, player_id_1,player_id_2,player_id_3,etc,color,date

Я пытаюсь использовать:

SELECT M.*, PM.player_id 
from matches M 
join player_matches P on M.match_id = P.match_id

, но получаю только 1 player_id. Как я могу сделать правильный sql запрос для достижения правильного результата?

1 Ответ

0 голосов
/ 08 апреля 2020

Вы можете использовать row_number() и условную агрегацию:

select 
    match_id,
    max(case when pm.rn = 1 then pm.player_id end) player_id_01,
    max(case when pm.rn = 2 then pm.player_id end) player_id_02,
    ...
    max(case when pm.rn = 10 then pm.player_id end) player_id_10,
    m.color,
    m.date
from matches m
inner join (
    select pm.*, row_number() over(partition by match_id order by player_id) rn 
    from player_matches pm
) pm on pm.match_id = m.match_id
group by m.match_id, m.color, m.date

Это создает одну запись за матч, максимум 10 игроков в столбцах, упорядоченных по идентификатору игрока.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...