event_form


 

event_users
 


위와 같이 두 테이블이 있을때,   세로를 가로로 출력하고 싶을 때 

 

SQL

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'MAX(IF(title = ''',
      title,
      ''', answer, NULL)) AS ',
      title
    )
  ) INTO @sql
FROM event_users;
 
SET @sql = CONCAT('SELECT event_number, answer_id,
                   ', @sql, ' FROM event_users                 
                   GROUP BY event_number');
 
PREPARE stmt FROM @SQL;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
cs

 

위와 같은 쿼리를 수행하게 되면

 



event_number를 중심으로 원하는 값만(event_number answer_id, @sql) 출력한다. 



SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'MAX(IF(title = ''',
      title,
      ''', answer, NULL)) AS ',
      title
    )
  ) INTO @sql
FROM event_users;

 

@sql은 위와같으므로 title 개수 만큼 필드를 출력 (위의 테이블 경우엔 4개 - (1번,2번,3번,4번) )