mysql - MySQL - 将行作为列和列作为行?
问题描述
如何将一行转换为 MySQL 中的一列?
我已经在 StackOverflow 上阅读了有关此主题的一些问题,但我仍然不知道如何才能达到我想要的结果。我也尝试了一些代码但没有成功。
以下示例有望使我想要的结果清楚。我创建了一个按用户 ID 分组的名为“summary_kcal”的视图。它的组成如下:
+---------+------+------+------+------+------+------+------+
| 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 # WHERE userid = #
最终都需要成为一个单独的子查询(或带有条件聚合的大型笨拙的 GROUP CONCAT 查询)。
推荐阅读
- transfer - 使用 xBee 传输文件(Raspberry Pi 到笔记本电脑)
- python - Google App Engine 在处理信号后终止:term
- visual-studio - Xamarin“generator.exe”无法运行。System.ComponentModel.Win32Exception (0x80004005):文件名或扩展名太长
- python - 在特定位置将值分配给熊猫数据框的问题
- javascript - Google Charts,水平条形图布局问题
- spring-boot - 没有符合条件的 bean 类型预计至少有 1 个有资格作为自动装配候选者的 bean
- java - jenkins k8s部署中的JAVA_OPTS,似乎没有考虑-Xss(栈大小)
- r - 将 XML 文件转换为 R 中的数据框列表
- java - 使用 JAVA 和 apache.pdfbox 设置打印 PDF 的分辨率
- asp.net-core - 为什么用户60分钟后自动注销,使用cookie认证