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

2024-01-12

我正在努力寻找解决这个 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       |
+-----------+---------+--------+-------------+----------+----------+

任何帮助将非常感激。

Thanks


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
  • SQLFiddle 演示 http://www.sqlfiddle.com/#!2/37a94/1

如果您有未知数量的问题(具体来说就是像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 @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;
  • SQLFiddle 演示 http://www.sqlfiddle.com/#!2/37a94/5

OUTPUT

╔════╦═════════╦════════╦═════════════╦══════════╦══════════╗
║ 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       ║
╚════╩═════════╩════════╩═════════════╩══════════╩══════════╝
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL 数据透视表列数据作为行 的相关文章

  • Java 日期和 MySQL 时间戳时区

    我正在编辑一段代码 其基本功能是 timestamp new Date 然后坚持下去timestamp中的变量TIMESTAMPMySQL 表列 然而 通过调试我看到Date显示在正确时区的对象 GMT 1 当持久化在数据库上时 它是GMT
  • mysql 中的 max(长度(字段))

    如果我说 select max length Name from my table 我得到的结果是 18 但我也想要相关数据 所以如果我说 select max length Name Name from my table 这是行不通的 我
  • 学说 - 获取下一个和上一个记录

    这样我就已经获取了一些记录 我已创建日期字段 现在我想按日期获取下一条和上一条记录 通过以下方式让它工作 qb this gt createQueryBuilder a next qb gt expr gt gt a created dat
  • 每组最大 n 个 SQL 查询的高性能方法

    我正在尝试构建一个基础设施 以便根据需要快速运行回归 从包含我们网络服务器上所有历史活动的数据库中提取 apache 请求 为了通过确保我们仍然回归来自较小客户的请求来提高覆盖范围 我想通过为每个客户检索最多 n 个 为了这个问题 假设 1
  • Mysql显示创建约束?

    有没有一种简单的方法来查询表的约束 特别是外键 就像显示创建表一样 但仅用于约束 thanks 普夫戈丁 要仅显示外键约束 您可以检查 information schema table constraints 中的constraint ty
  • 我无法访问 XAMPP phpMyAdmin;它说:错误 MySQL 说:文档无法连接:无效设置

    完整错误消息 Error MySQL said Documentation Cannot connect invalid settings Connection for controluser as defined in your conf
  • 如何从 mysql 数据库中提取数据并使用 D3.JS 进行可视化?

    我有一个数据库MySQL我想在其中可视化D3 JS 为了做到这一点 首先我想parse中的数据JSON格式 然后编写一个基本代码 从数据库中提取数据并使用D3 JS 我环顾四周 但找不到我想要的东西 因为我是新手D3 JS 我怎样才能做到这
  • 使用 Java 连接到 MySql - SSL 连接

    我一直在尝试连接到 MySql 数据库 该数据库使用 ssl 连接与 java 并遇到麻烦 如果任何人可以帮助我 将会有很大的帮助 手动连接MySql 我们使用MySQL Workbench 参数 主机名 test db1 ro xxxxx
  • 当您有两种类型的记录时,该表的最佳数据库设计是什么

    我正在跟踪练习 我有一个workout表与 id 练习ID 外键进入练习表 现在 一些练习 例如重量训练 将包含以下字段 重量 次数 我刚刚举起 10 次 100 磅 跑步等其他练习将包含以下字段 时间 距离 我刚刚跑了5英里 花了1个小时
  • SQL 选择 ID 相同的多个最大行

    我在这方面一次又一次地挣扎 但无法让它发挥作用 在这些论坛上呆了几个小时 数据集 Row Date AccountID Column 1 1 21 02 2013 0 30 A0M8FA1003YP 2 21 02 2013 0 30 A0
  • 交叉表的动态 MySQL 查询/视图

    我目前有一个带有以下 sql 的硬编码视图 select username case user role role id when 1 then true else false end as ROLE SUPER case user rol
  • Laravel 5.2 中使用多个 MySQL 数据库连接查询关系存在

    我正在处理以下情况 我有两个模型 一个Employee with id and name字段和一个Telephone with id employee id and flag字段 还有一个一对多关系在这两种模型之间 即一个员工可能拥有多部电
  • postgresql 中的咨询锁超时

    我正在从 ORACLE 迁移 目前我正在尝试移植此呼叫 lkstat DBMS LOCK REQUEST lkhndl DBMS LOCK X MODE lktimeout true 这个功能 http docs oracle com cd
  • MySQL 连接最新行

    我有两张桌子agents and calls 座席将始终处于一个活动呼叫中 可能有另一个待处理的呼叫分配给某个座席 而该座席尚未应答 我想编写一个查询来测试最新的调用是否按排序dateCreated与代理表中当前活动的呼叫匹配 以下是当前呼
  • MySQL Workbench:如何将 mysql 数据库导出到 .sql 文件?

    我需要将 mysql 工作台中的数据库导出到文件 sql 该怎么办 在 MySql Workbench 版本 8 0 中 您只需按照以下步骤操作即可 Go to Server tab Go to 数据库导出 这会打开类似这样的东西 在中选择
  • 从关键字后的文本中提取字符串

    我想从 SQL 字段中关键字后面的文本中提取内容 我有一个名为Description在表中 该字段的内容是 asdasf 关键字 狗 aeee 关键字 猫 ffffaa 关键词 狼 我想提取并保存 关键字 之后的文本 在本例中dog cat
  • MySQL - 如何将列逆透视到行?

    ID a b c 1 a1 b1 c1 2 a2 b2 c2 如何将行重新组织为ID columntitle value 1 a1 a 1 b1 b 1 c1 c 2 a2 a 2 b2 b 2 c2 c 你正在尝试unpivot数据 My
  • 当我在 PHP 中将 print_r() 应用于数组时,为什么会得到“Resource id #4”? [复制]

    这个问题在这里已经有答案了 可能的重复 我如何从 PHP 中的 MySql 响应中 回显 资源 id 6 https stackoverflow com questions 4290108 how do i echo a resource
  • SQL准备语句如何通过多个可能的菜单选择进行选择?

    所以我有 4 个菜单选择 产品 位置 课程类型和类别 所有这些都可以为空 使用 JSF 编程 但这应该与这个问题无关 因为它是一个 SQL 问题 菜单选择将向托管 bean 发送用户选择的变量 并使用准备好的语句使用用户选择的菜单中的信息
  • 计算 MySQL 中的行数以及实际行内容

    MySQL 中有没有办法执行单个 SQL 语句来返回所选行以及结果行数 我可以做这个 SELECT COUNT FROM BigTable WHERE firstname LIKE a 这给了我一个带有计数 37 781 的结果行 我可以像

随机推荐

  • Macports 选择默认的 Python 解释器来执行脚本? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 I used python select 它似乎没有改变执行脚本的默认 python 例如django admin py runserver 前面没有
  • MSDTC - 需要多少个端口

    我有一个使用 MSDTC 的相当大的应用程序 我应该打开多少个端口 有什么办法可以确定吗 EDIT I know what我需要打开的端口 我不知道how many I need 当我们必须进行这种调试时 这篇文章特别有用 如何解决 MS
  • Spring MockRestServiceServer 处理多个异步请求

    我有一个协调器 Spring Boot 服务 它向外部服务发出几个异步休息请求 我想模拟这些服务的响应 我的代码是 mockServer expect requestTo http localhost retrieveBook book1
  • 如何使用简单注入器注册 Windows 窗体

    背景 我正在构建一个 winforms 应用程序 其中使用 IoC 容器 SimpleInjector 来注册我的类型 在我的应用程序中 大多数屏幕 即表单 在任何给定时间都只有一个实例 Problem 对于在任何给定时间只需要一个实例的表
  • 想要在jquery中旋转元素

    我在尝试着旋转一个元素 任何元素 div p handle handle gt div 我放置在元素的top left角落 现在我的问题是该元素没有完全旋转到 360 度 任何人都可以帮忙 elementid live mouseover
  • Word 2010 VBA - 操作编号列表

    我正在尝试获取在 Outlook 中创建的编号列表 并根据顶级列表项对其进行操作 不幸的是 我发现操作列表的唯一方法是通过 ListParagraph 类型 它平等地分解所有列表项 包括子项 而不是对列表中的每个级别具有不同的访问权限 有没
  • 带 rollup 和 redux 的 lit-element:未定义流程

    我正在尝试将基于 lit element 的应用程序中的状态管理从简单的全局变量切换为 redux 按照 redux 教程 我安装了 redux 工具包并创建了一个简单的减速器和存储 使用汇总构建应用程序成功 但当我在 Chrome 中加载
  • Java机器人鼠标移动:设置速度?

    Java Robot 类允许人们移动鼠标 就像移动实际的物理鼠标一样 然而 如何以一种人性化 而非即时 的方式将鼠标从 Point1 移动到 Point2 又名 如何设置移动速度 如果Robot类不可能达到这样的速度 那么如果鼠标只能瞬时移
  • 如何解决 FATAL:超出非超级用户的连接限制

    我写了一个用于批量插入的java代码 我使用复制命令为不同的表导入和创建不同的连接对象 但在执行时 程序抛出以下错误 FATAL connection limit exceeded for non superusers 您已超出 Postg
  • 如何防止弹出基本身份验证表单

    我有一个 Java 应用程序 JSF 它使用 javascript 连接到需要基本身份验证的网站 我想要配合的事情与我在弹出表单中输入用户名和密码时发生的事情完全相同 我已经尝试了许多关于该主题的不同方法 但没有一个有效 奇怪的是 ajax
  • 以编程方式单击 jetpack compose 中的文本字段

    有没有一种方法可以以编程方式单击文本字段 以便当我的搜索屏幕弹出时 它会自动单击文本字段并弹出键盘 或者 有没有办法知道文本字段的触摸事件 With 1 0 x您可以将焦点放在该组件上 就像是 var text by remember mu
  • 使列等高 - 通过嵌套

    我的设计使用两个外部列 并在标题部分的外部列之一和下面的另外两列中 如下所示 header out1 out2 footer
  • MockMVC 对异步服务执行后期测试

    我需要测试调用异步服务的控制器 控制器代码 RequestMapping value path method RequestMethod POST produces MediaType APPLICATION JSON VALUE Resp
  • 如何在 Spark 中以小块形式迭代大型 Cassandra 表

    在我的测试环境中 我有 1 个 Cassandra 节点和 3 个 Spark 节点 我想迭代大约有 200k 行的明显大表 每行大约占用 20 50KB CREATE TABLE foo uid timeuuid events blob
  • 如何将 MIDAS.DLL 嵌入客户端可执行文件中

    据博士说 鲍勃 这是可以做到的 有人可以提供分步示例或教程吗 你没有嵌入MIDAS DLL 你添加MidasLib到你的项目的USES条款 这会将基本功能嵌入到您的程序中 而无需依赖单独的 DLL
  • 服务器控制行为异常

    我有一个我编写的服务器控件 通常工作正常 但是 当我添加突出显示的行时 它添加的不是一个而是两个 br 元素 这不是我所追求的 mounting new DropDownLabel mounting ID mountTypeList mou
  • 是否可以在 Adob​​e Flex 中执行#define?

    我正在寻找一种方法来执行类似于 adobe flex 中的 c c define 的操作 我希望项目构建可以采用许多不同的路径 具体取决于是否定义了某些内容 Flex 中存在这样的东西吗 我知道有一些方法可以设置全局变量 但这并不真正适合我
  • 反序列化Bson文件

    我有一个用 mongodump 工具生成的 Bson 文件 我想在 C 代码中反序列化 为此 我似乎可以使用 mongodb C 驱动程序或 Json net 库 我尝试了它们 但我无法让它们工作 使用 Json net 库 input 是
  • MySQL Sum() 多列

    我有一张学生记分卡表 这是桌子 subject mark1 mark2 mark3 markn stud1 99 87 92 46 stud2 studn 现在 我需要对每个学生的总分进行求和 我通过使用得到它sum mark1 mark2
  • MySQL 数据透视表列数据作为行

    我正在努力寻找解决这个 MySQL 问题的方法 我似乎不知道该怎么做 我有以下表格 Question table id question 1 Is it this 2 Or this 3 Or that Results Table id u