mysql - 连接表并转置列和行

标签 mysql transpose

我有一个看起来像这样的表,叫做 survey_1:

================================================
|id  | token  |     1X2X1     |    1X2X2       |
=====+========+===============+================|
| 1  |   1    |    YES        | Justin Beiber  |
|----+--------+---------------+----------------|
| 2  |   1    |    YES        | Britney Spears |
|----+--------+---------------+----------------|

注意:1X2X1代表-survey-id X group-id X question-id

我有另一个名为 survey_questions 的表:

===============================================================
|sid |   gid  |   qid  |             question                 |
=====+========+===============+===============================|
| 1  |  2     |    1   |  Do you listen to music?             |
|----+--------+-----------------------------------------------|
| 1  |  2     |    2   |  Who is your favorite music artists? |
|----+--------+-----------------------------------------------|

sid (survey-id)、gid (group-id) 和 qid(question-id) 定义了这个表中的特定问题

我需要一个能给我这样结​​果的查询:

======================================================
|           Question                  |   Answer     |
=========+===========+===============================|
| Do you listen to music?             |    YES       |            
|----------------------------------------------------|
| Who is your favorite music artists? | Justin Beiber| 
|----------------------------------------------------|

注意:我的数据库包含数千个这样的列,因此编辑每个调查以完全匹配这种格式将非常耗时。

谁能帮忙解决这个问题?谢谢

最佳答案

你能改变表架构吗?因为第一个表 survey_1 最好写成每个答案一行,每行包含另一个表的整个键。像这样(添加自己的索引)

create table survey_1 (
  id int,
  token int,
  sid int,
  gid int,
  qid int,
  answer varchar(255)
)

比数据会是

------------------------------------------
| 1 | 1 | 1 | 2 | 1 | "YES"              |
| 1 | 1 | 1 | 2 | 2 | "Justin Beiber"    |
| 2 | 1 | 1 | 2 | 1 | "YES"              |
| 2 | 1 | 1 | 2 | 2 | "Britney Spears"   |
------------------------------------------

它会更容易使用,而且通常会是更好的设计。

这是它的样子 http://sqlfiddle.com/#!2/4f1ca/2

关于mysql - 连接表并转置列和行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12962000/

相关文章:

php - MySQL 数据库的编码问题 (web2project)

c - 由 8x __m256i 寄存器表示的矩阵的 AVX2 转置

mysql - SQL计算不同列值

Java SQL 应用程序。输入没有更新到我的数据库中

mysql - RT 4.0.3 到 4.4.3 由于 ACL 检查导致性能问题

mysql - 在 shell 脚本中转义大括号

C#矩阵类设计(转置法)

python - 如何将 Pandas 列转换为数组并进行转置?

r - 如何使用 R 将两个数据帧的值相交

google-sheets - 如何在 Google 表格中转置此数据