首页 > 数据库 > mysql教程 > 如何在 MySQL 中将列逆透视为行?

如何在 MySQL 中将列逆透视为行?

Linda Hamilton
发布: 2025-01-20 05:41:08
原创
1002 人浏览过

How to Unpivot Columns into Rows in MySQL?

MySQL 中将列转换为行的技巧

在 MySQL 中处理以列形式组织的数据时,您可能需要将其转换为以行为单位呈现数据的格式。这个过程称为解旋(Unpivoting)。

问题:

考虑以下表格:

<code>ID | a  | b  | c 
1  | a1 | b1 | c1
2  | a2 | b2 | c2</code>
登录后复制

目标是将列转换为行,得到如下结构的表:

<code>ID | 值 | 列名
1  | a1 | a
1  | b1 | b
1  | c1 | c
2  | a2 | a
2  | b2 | b
2  | c2 | c</code>
登录后复制

解决方案:

与其他一些数据库不同,MySQL 没有内置的解旋函数。要获得所需的结果,您可以使用 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、列名和相应的值。

使用 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>
登录后复制

在这种情况下,CROSS JOINyourtable 的行和生成列名的子查询的行之间创建笛卡尔积。CASE 语句将每个列名映射到其对应的列值。

这两种方法都能有效地解旋数据,为您提供所需的基于行的结构。

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板