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
'programing' 카테고리의 다른 글
| 문서 집합에 대한 각 값의 발생 횟수를 몽고 카운트 (0) | 2023.07.08 |
|---|---|
| SQL 스크립트 하나로 하위 및 상위 행 삭제 (0) | 2023.07.08 |
| git: 'lfs'는 git 명령이 불분명하지 않습니다. (0) | 2023.07.08 |
| mongodb 컬렉션의 문서 수를 세는 방법 (0) | 2023.07.08 |
| 날짜로부터 연도 추출 (0) | 2023.07.08 |