프로그래밍/mysql

MySQL (or MariaDB) 에서 row 데이터를 column 으로 변경하기

verdana 2019. 4. 2. 14:04

오라클을 사용할때는 어렵게 구현 했던것을 MySQL을 사용하면서 아주 쉽게 구현이 가능했다.

Row Data:
+-----------+----------+
| colHeader | value    |
+-----------+----------+
| Header1   | value 1  |
+-----------+----------+
| Header2   | value 2  |
+-----------+----------+
| Header3   | value 3  |
+-----------+----------+
Output:
+-----------+-----------+-----------+
| Header1   | header2   | Header3   |
+-----------+-----------+-----------+
| Value 1   | value 2   | Value 3   |
+-----------+-----------+-----------+
방법1 원시적인 방법이며, 조회속도 자체가 느리다.
SELECT t1.value AS `Header1`,
       t2.value AS `Header2`,
       t3.value AS `Header3`
  FROM (SELECT * FROM table1 WHERE colHeader='Header1') t1
  JOIN (SELECT * FROM table1 WHERE colHeader='Header2') t2
  JOIN (SELECT * FROM table1 WHERE colHeader='Header3') t3;
방법2 깔끔하게 해결 된다.
SELECT  
  ID,
  GROUP_CONCAT(if(colHeader = 'Header 1', value, NULL)) AS 'Header 1', 
  GROUP_CONCAT(if(colHeader = 'Header 2', value, NULL)) AS 'Header 2', 
  GROUP_CONCAT(if(colHeader = 'Header 3', value, NULL)) AS 'Header 3' 
FROM myTable
GROUP BY ID;

[출처] MySQL (or MariaDB) 에서 row 데이터를 column 으로 변경하기.|작성자 동쪽새