栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

MySQL数据透视表的列数据作为行

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MySQL数据透视表的列数据作为行

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.IDGROUP   BY a.ID,        a.user_ID,        a.job_id
  • SQLFiddle演示

如果您不清楚问题的数量( 例如Matei Mihai所说的1000个 ),则非常需要动态版本。

SET @sql = NULL;SELECt  GROUP_CONCAt(DISTINCT    CONCAt(      'MAX(CASE WHEN c.question = ''',      question,      ''' then b.answer end) AS ',      CONCAt('`',question,'`')    )  ) INTO @sqlFROM 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;
  • SQLFiddle演示

输出值

╔════╦═════════╦════════╦═════════════╦══════════╦══════════╗║ 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       ║╚════╩═════════╩════════╩═════════════╩══════════╩══════════╝


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/416485.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号