programing

MariaDB 10.3에서 행을 열로 동적 변환

javajsp 2023. 7. 8. 10:36

MariaDB 10.3에서 행을 열로 동적 변환

다음 테이블 데이터가 있습니다.

팀들 토너먼트 연상의 player_id
MT 101 이지 100696
MT 101 이지 100439
MT 101 이지 102486
MT 101 이지 111887
MT 101 NGR 113563
MT 101 NGR 111959
MT 101 NGR 145024
MT 101 NGR 104514
MT 101 NGR 112092
WT 101 이지 202375
WT 101 이지 116724
WT 101 이지 134971
WT 101 이지 200157
WT 101 NGR 102441
WT 101 NGR 146169
WT 101 NGR 134970
WT 101 NGR 133736
WT 101 NGR 101247

행을 열로 바꾸고 다음을 가져오려고 합니다.

팀들 토너먼트 연상의 player_id1 player_id2 player_id3 player_id4 player_id5
MT 101 이지 100696 100439 102486 111887
MT 101 NGR 113563 111959 145024 104514 112092
WT 101 이지 202375 116724 134971 200157
WT 101 NGR 102441 146169 134970 133736 101247

협회, 토너먼트 및 팀별로 그룹화해야 하며 player_idx의 최대 열은 5개일 수 있습니다.피벗 테이블에 대한 솔루션을 시도했지만 실패했습니다.

with cte as (select teams, tournament, assoc, player_id, row_number() over (partition by teams, tournament, assoc) as rownum from mytable)
select teams, tournament, assoc,
  max(case rownum when 1 then player_id end) as player_id1,
  max(case rownum when 2 then player_id end) as player_id2,
  max(case rownum when 3 then player_id end) as player_id3,
  max(case rownum when 4 then player_id end) as player_id4,
  max(case rownum when 5 then player_id end) as player_id5
from cte
group by teams, tournament, assoc;

+-------+------------+-------+------------+------------+------------+------------+------------+
| teams | tournament | assoc | player_id1 | player_id2 | player_id3 | player_id4 | player_id5 |
+-------+------------+-------+------------+------------+------------+------------+------------+
| MT    |        101 | EGY   |     100439 |     100696 |     102486 |     111887 |       NULL |
| MT    |        101 | NGR   |     104514 |     111959 |     112092 |     113563 |     145024 |
| WT    |        101 | EGY   |     116724 |     134971 |     200157 |     202375 |       NULL |
| WT    |        101 | NGR   |     101247 |     102441 |     133736 |     134970 |     146169 |
+-------+------------+-------+------------+------------+------------+------------+------------+

MySQL 8.0 및 MariaDB 10.3의 이 dbfidle에서 테스트됨:

https://dbfiddle.uk/ ?rdbms=httpadb_10.3&httpdle=ec2fc62b17fdc5eac9198f9298f229cc

언급URL : https://stackoverflow.com/questions/73573245/dynamically-convert-rows-to-columns-in-mariadb-10-3