首页 >数据库 >mysql教程 >如何使用 UNION ALL 或 CROSS JOIN 将 MySQL 列逆透视为行?

如何使用 UNION ALL 或 CROSS JOIN 将 MySQL 列逆透视为行?

Linda Hamilton
Linda Hamilton原创
2025-01-20 05:56:09598浏览

How to Unpivot MySQL Columns into Rows Using UNION ALL or CROSS JOIN?

将 MySQL 列重组为行

数据转换是数据库管理中的常见任务。 在 MySQL 中,为了改进数据分析或表示,通常需要将列数据转换为行(这一过程称为逆透视)。虽然 MySQL 缺乏专用的 unpivot 函数,但可以使用 UNION ALL 查询或 CROSS JOIN.

有效地实现此转换。

UNION ALL方法

一种有效的策略采用 UNION ALL 运算符:

<code class="language-sql">SELECT id, 'a' AS col, a AS value
FROM yourtable
UNION ALL
SELECT id, 'b' AS col, b AS value
FROM yourtable
UNION ALL
SELECT id, 'c' AS col, c AS value
FROM yourtable;</code>

此查询检索 id 列以及列名称 (col) 及其相应的值 (value)。 结果是一个重构的数据集,其中每一行代表一个列值对。

CROSS JOIN方法

或者,可以使用CROSS JOIN

<code class="language-sql">SELECT t.id,
       c.col,
       CASE c.col
           WHEN 'a' THEN a
           WHEN 'b' THEN b
           WHEN 'c' THEN c
       END AS data
FROM yourtable t
CROSS JOIN
(
  SELECT 'a' AS col
  UNION ALL SELECT 'b'
  UNION ALL SELECT 'c'
) c;</code>

此处,yourtable(别名为 t)与生成列名称列表 (col) 的子查询连接。 CASE 语句根据列名动态选择适当的值。 结果与 UNION ALL 方法非常相似,是一个扁平数据集,其中每行包含 id、列名称及其关联值。

UNION ALLCROSS JOIN 技术都为 MySQL 中的列逆透视提供了强大的解决方案,从而能够将列式数据转换为行以进行后续处理或可视化。

以上是如何使用 UNION ALL 或 CROSS JOIN 将 MySQL 列逆透视为行?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn