mysql - 如何将表格从 1 行多列重组为多行少列?

标签 mysql sql pivot

假设我有一个只有 1 行的 SQL 表:

+----+----+----+------+------+------+-------+
| U1 | U2 | U3 | ACC1 | ACC2 | ACC3 | TOTAL |
+----+----+----+------+------+------+-------+
|  1 |  2 |  4 |   10 |   18 |   17 |    45 |
+----+----+----+------+------+------+-------+

上表由以下字段组成:

  1. U1:Triple中第一个用户的用户ID
  2. U2:Triple中第二个用户的用户ID
  3. U3:Triple中第3个用户的用户ID
  4. ACC1:U1 的 ACC
  5. ACC2:U2 的 ACC
  6. ACC3:U3 的 ACC
  7. 总计:ACC1 + ACC2 + ACC3

现在,我希望通过将此表转换为以下形式来提高其可读性。

+----+----+
| U  | ACC|  
+----+----+
|  1 | 10 |   
|  2 | 18 |
|  4 | 17 | 
+----+----+

我如何在 MySQL 中执行此操作? PIVOT/UNPIVOT 有帮助吗?如果是,怎么办?

最佳答案

最简单的方法是union all:

select u1 as u, acc1 as acc from t
union all
select u2 as u, acc2 as acc from t
union all
select u3 as u, acc3 as acc from t;

这确实需要扫描表格三次。对于一行,这在性能方面没有任何区别。

pivot/unpivot 没有帮助,因为 MySQL 不支持它。

关于mysql - 如何将表格从 1 行多列重组为多行少列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48858884/

相关文章:

mysql - 使用相同的散列数据更新列

c# - 了解 ExecuteNonQuery 的返回值

PHP分页颠倒

java - 递归算法中的无限循环

sql - 做数据透视时无用的错误消息

sql - 有没有办法在不使用 CASE 的情况下将行转换为列?

mysql - 为不同用户选择结果

sql - 如何使用 COLLATE NOCASE 按不区分大小写的字母顺序排序

sql - 使用 PowerShell 在 SQL Server 配置管理器中启用 TCP/IP

mysql - 使用hibernate在查询MySQL数据库中排序