これは基本的にはありPIVOT
ますが、MySQL には機能がありませんPIVOT
。したがって、集計関数とCASE
ステートメントを使用してこれを複製する必要があります。値の数がわかっている場合は、次のQuestionNum
ようなクエリをハードコーディングできます。
select pin,
max(case when QuestionNum = 1 then response end) Question1,
max(case when QuestionNum = 2 then response end) Question2
from yourtable
group by pin
デモで SQL Fiddle を参照してください
の値の数が不明な場合はQuestionNum
、準備済みステートメントを使用して、このクエリの動的バージョンを生成できます。
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'max(case when QuestionNum = ''',
QuestionNum,
''' then response end) AS Question',
QuestionNum
)
) INTO @sql
FROM yourtable;
SET @sql = CONCAT('SELECT pin, ', @sql, '
FROM yourtable
GROUP BY pin');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
デモで SQL Fiddle を参照してください
どちらも同じ結果になります。
| PIN | QUESTION1 | QUESTION2 |
--------------------------------
| 1111 | 1 | 3 |
| 2222 | 4 | 3 |
| 3333 | (null) | 5 |