You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL 5.7如何实现列转行(Unpivot)操作?

MySQL 5.7及以下行列转换解决方案

针对你给出的需求,这里提供适配MySQL 5.7及以下版本的实现方案,不需要用到CROSS JOIN:

1. 表结构与测试数据准备

假设你的表名为person_items,可通过以下语句创建并插入测试数据:

CREATE TABLE person_items (
    NAME VARCHAR(20),
    CLOTH VARCHAR(3),
    SHOES VARCHAR(3),
    PHONE VARCHAR(3)
);

INSERT INTO person_items VALUES
('MOHAN', 'YES', 'YES', 'YES'),
('MAHESH', 'YES', 'NO', 'NO');

2. 行列转换SQL实现

SELECT 
    category,
    MAX(CASE WHEN NAME = 'MOHAN' THEN value END) AS MOHAN,
    MAX(CASE WHEN NAME = 'MAHESH' THEN value END) AS MAHESH
FROM (
    -- 用UNION ALL将原表列数据拆分为行数据
    SELECT NAME, 'CLOTH' AS category, CLOTH AS value FROM person_items
    UNION ALL
    SELECT NAME, 'SHOES' AS category, SHOES AS value FROM person_items
    UNION ALL
    SELECT NAME, 'PHONE' AS category, PHONE AS value FROM person_items
) AS temp
GROUP BY category
ORDER BY category;

3. 代码逻辑说明

  • 内层子查询:通过UNION ALL把原表中每个用户的CLOTH、SHOES、PHONE字段拆分成独立行,每行包含用户名、类别名称和对应值,完成列到行的初步转换。
  • 外层查询:以category分组,用MAX(CASE...)聚合函数分别提取每个用户在对应类别下的取值(因每个类别+用户组合仅一条数据,用MIN也可达到效果)。
  • ORDER BY category保证结果按类别排序,与你期望的输出格式一致。

执行结果

运行上述SQL后,输出如下:

CATEGORY   MOHAN  MAHESH
CLOTH      YES    YES
SHOES      YES    NO
PHONE      YES    NO

内容的提问来源于stack exchange,提问作者mohan111

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 16:32:08