Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用MySQL重塑数据_Mysql_Pivot - Fatal编程技术网

使用MySQL重塑数据

使用MySQL重塑数据,mysql,pivot,Mysql,Pivot,我有一张这样构造的桌子: +----+---------+---------+----+----+ | id | filter1 | filter2 | q1 | q2 | +----+---------+---------+----+----+ | 1 | america | y | 1 | 2 | | 2 | asia | y | 4 | 3 | +----+---------+---------+----+----+ 我需要的是在同一标题下,以q

我有一张这样构造的桌子:

+----+---------+---------+----+----+
| id | filter1 | filter2 | q1 | q2 |
+----+---------+---------+----+----+
|  1 | america | y       |  1 |  2 |
|  2 | asia    | y       |  4 |  3 |
+----+---------+---------+----+----+
我需要的是在同一标题下,以q1和q2为轴心(?)
问题
,并在名为
答案

最后一张表如下所示:

+----+---------+---------+----------+--------+
| id | filter1 | filter2 | question | answer |
+----+---------+---------+----------+--------+
|  1 | america | y       | q1       |      1 |
|  1 | america | y       | q2       |      2 |
|  2 | asia    | y       | q1       |      4 |
|  2 | asia    | y       | q2       |      3 |
+----+---------+---------+----------+--------+

最简单的方法是使用
union all

select id, filter1, filter2, 'q1' as question, q1 as answer
from table t
union all
select id, filter1, filter2, 'q2' as question, q2 as answer
from table t;
如果您有非常大的表或更多的问题,那么这可能不是最有效的方法

编辑:

对于大型表,这可能更有效:

select id, filter1, filter2,
       (case when n.n = 1 then 'q1' else 'q2' end) as question,
       (case when n.n = 1 then q1 else q2 end) as answer
from table t cross join
     (select 1 as n union all select 2 as n) n;
这应该只对表执行一次完整的表扫描,而不是对
union all
中的每个子查询执行一次