这基本上是一个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 |