[SQL] MySQL의 피벗 테이블의 열 데이터 행으로
SQLMySQL의 피벗 테이블의 열 데이터 행으로
나는 해결책이 MySQL의 문제를 찾기 위해 사투를 벌인거야. 난 그냥 작업을 수행하는 방법 주위에 내 머리를 얻을 수없는 것. 나는 다음과 같은 테이블이있다.
Question table
+----+-------------+
| id | question |
+----+-------------+
| 1 | Is it this? |
| 2 | Or this? |
| 3 | Or that? |
+----+-------------+
Results Table
+----+---------+--------+
| id | user_id | job_id |
+----+---------+--------+
| 1 | 1 | 1 |
| 2 | 1 | 3 |
| 3 | 2 | 3 |
+----+---------+--------+
Answers table
+----+-------------------------+--------------+
| id | answer | fk_question_id | fk_result_id |
+----+-------------------------+--------------+
| 1 | Yes | 1 | 1 |
| 2 | No | 2 | 1 |
| 3 | Maybe | 3 | 1 |
| 4 | Maybe | 1 | 2 |
| 5 | No | 2 | 2 |
| 6 | Maybe | 3 | 2 |
| 7 | Yes | 1 | 3 |
| 8 | Yes | 2 | 3 |
| 9 | No | 3 | 3 |
+----+-------------------------+--------------+
가능하면 나는 다음과 같이 각 결과 세트에 대한 열의와 같은 질문의 답을 표시하고 싶습니다.
+-----------+---------+--------+-------------+----------+----------+
| result_id | user_id | job_id | Is it this? | Or this? | Or that? |
+-----------+---------+--------+-------------+----------+----------+
| 1 | 1 | 1 | Yes | No | Maybe |
| 2 | 1 | 3 | Maybe | No | Maybe |
| 3 | 2 | 3 | Yes | Yes | No |
+-----------+---------+--------+-------------+----------+----------+
어떤 도움이 많이 주시면 감사하겠습니다.
감사
해결법
-
==============================
1.
SELECT a.ID, a.user_ID, a.job_id, MAX(CASE WHEN c.question = 'Is it this?' THEN b.answer END) 'Is it this?', MAX(CASE WHEN c.question = 'Or this?' THEN b.answer END) 'Or this?', MAX(CASE WHEN c.question = 'Or that? ' THEN b.answer END) 'Or that? ' FROM Results a INNER JOIN Answers b ON a.id = b.fk_result_id INNER JOIN Question c ON b.fk_question_id = c.ID GROUP BY a.ID, a.user_ID, a.job_id
질문 (Matei 미하이 말했듯이 특별히 1000)의 알 수없는 번호가있는 경우, 동적 버전이 많이 필요합니다.
SET @sql = NULL; SELECT GROUP_CONCAT(DISTINCT CONCAT( 'MAX(CASE WHEN c.question = ''', question, ''' then b.answer end) AS ', CONCAT('`',question,'`') ) ) INTO @sql FROM Question; SET @sql = CONCAT('SELECT a.ID, a.user_ID, a.job_id, ', @sql, ' FROM Results a INNER JOIN Answers b ON a.id = b.fk_result_id INNER JOIN Question c ON b.fk_question_id = c.ID GROUP BY a.ID, a.user_ID, a.job_id'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
산출
╔════╦═════════╦════════╦═════════════╦══════════╦══════════╗ ║ ID ║ USER_ID ║ JOB_ID ║ IS IT THIS? ║ OR THIS? ║ OR THAT? ║ ╠════╬═════════╬════════╬═════════════╬══════════╬══════════╣ ║ 1 ║ 1 ║ 1 ║ Yes ║ No ║ Maybe ║ ║ 2 ║ 1 ║ 3 ║ Maybe ║ No ║ Maybe ║ ║ 3 ║ 2 ║ 3 ║ Yes ║ Yes ║ No ║ ╚════╩═════════╩════════╩═════════════╩══════════╩══════════╝
from https://stackoverflow.com/questions/15656273/mysql-pivot-table-column-data-as-rows by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 오라클 SQL은 - 연속 값 범위를 확인 (0) | 2020.05.05 |
---|---|
[SQL] 어떤 방법은 전체 텍스트와 같은 이노에 검색을 달성하기 위해 (0) | 2020.05.05 |
[SQL] 어떻게 오라클에서 일정 테이블을 채우는? (0) | 2020.05.05 |
[SQL] 이유는 다음 SELECT 표현에 열 별칭을 사용할 수 없습니다? (0) | 2020.05.05 |
[SQL] 사용 액세스 SQL은 그룹화 된 순위를 할 수 (0) | 2020.05.05 |