Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.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 - Fatal编程技术网

MySQL-将行作为列,将列作为行?

MySQL-将行作为列,将列作为行?,mysql,Mysql,在MySQL中如何将行转换为列 我已经读了一些关于StackOverflow的问题,但是我仍然不知道如何才能达到我想要的结果。我还尝试了一些代码,但没有成功 下面的示例希望能清楚地说明我想要的结果。我创建了一个名为“summary_kcal”的视图,该视图按用户ID分组,其组成如下: +---------+------+------+------+------+------+------+------+ | userid | LU | MA | ME | GIO | VE |

在MySQL中如何将行转换为列

我已经读了一些关于StackOverflow的问题,但是我仍然不知道如何才能达到我想要的结果。我还尝试了一些代码,但没有成功

下面的示例希望能清楚地说明我想要的结果。我创建了一个名为“summary_kcal”的视图,该视图按用户ID分组,其组成如下:

+---------+------+------+------+------+------+------+------+
| userid  |  LU  |  MA  |  ME  |  GIO |  VE  |  SA  | DO   | 
+---------+------+------+------+------+------+------+------+
| 1       | 1000 | 2000 | 1000 | 1500 | 2000 | 1000 | 1500 |
+---------+------+------+------+------+------+------+------+
我想将其转换为:

+---------+---------+
| userid  | 1       |
+---------+---------+
| LU      | 1000    | 
+---------+---------+
| MA      | 2000    | 
+---------+---------+
| ME      | 1000    |
+---------+---------+
| GIO     | 1500    |
+---------+---------+
| VE      | 2000    |
+---------+---------+
| SA      | 1000    |
+---------+---------+
| DO      | 1500    |
+---------+---------+

通常最好在客户端执行这种转换,但如果确实需要在数据库中执行转换

SELECT "LU" AS userid, `LU` AS `1` WHERE userid = 1
UNION
SELECT "MA" AS userid, `MA` AS `1` WHERE userid = 1
UNION
SELECT "ME" AS userid, `ME` AS `1` WHERE userid = 1
UNION
SELECT "GIO" AS userid, `GIO` AS `1` WHERE userid = 1
UNION
SELECT "VE" AS userid, `VE` AS `1` WHERE userid = 1
UNION
SELECT "SA" AS userid, `SA` AS `1` WHERE userid = 1
UNION
SELECT "DO" AS userid, `DO` AS `1` WHERE userid = 1
注意:您实际上只需要在第一个查询中使用别名,只是为了清晰和一致而包括别名


如果您需要多个列,每个用户行一个列,这将很快变得难以管理,因为每个
XX as#其中userid=#
最终需要成为一个单独的子查询(或一个具有条件聚合的大型笨拙的组CONCAT查询)。

可能重复的@uuerdo看起来更像unpivot,但实际上,太模糊了,谁知道呢?看,草莓啊,是的,我现在明白了。我一定是浏览得太快了,因为我认为第一块是所需的格式。