【问题标题】:get 2 columns in my query result在我的查询结果中获取 2 列
【发布时间】:2012-11-12 21:06:35
【问题描述】:

我有一个如下所示的表格

PIN    QuestionNum     Response
1111   1               1
1111   2               3
2222   1               4
2222   2               3
3333   2               5

我的查询的预期输出是:

PIN   Question1   Question2
1111  1           3
2222  4           3
3333  null        5

我不知道是否可以使查询的输出看起来像这样。

如果可以的话,谁能告诉我。

【问题讨论】:

标签: mysql pivot


【解决方案1】:

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

现在,如果您有未知数量的 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 with Demo

两者都会产生相同的结果:

|  PIN | QUESTION1 | QUESTION2 |
--------------------------------
| 1111 |         1 |         3 |
| 2222 |         4 |         3 |
| 3333 |    (null) |         5 |

【讨论】:

  • 非常感谢您的回复,这正是我想要的!
猜你喜欢
  • 2014-08-25
  • 2015-09-12
  • 1970-01-01
  • 1970-01-01
  • 2021-12-26
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多