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

SQL如何实现行转列?将code_val列的值转为横向展示的方法

SQL行转列实现方案

如果你的原表包含code_val字段,需要将该字段的所有行值按顺序横向输出为多列,可参考以下实现:

1. 通用实现(支持MySQL 8.0+、PostgreSQL、Oracle、SQL Server等所有支持窗口函数的数据库)

SELECT
    MAX(CASE WHEN rn = 1 THEN code_val END) AS col1,
    MAX(CASE WHEN rn = 2 THEN code_val END) AS col2,
    MAX(CASE WHEN rn = 3 THEN code_val END) AS col3,
    MAX(CASE WHEN rn = 4 THEN code_val END) AS col4,
    MAX(CASE WHEN rn = 5 THEN code_val END) AS col5,
    MAX(CASE WHEN rn = 6 THEN code_val END) AS col6
FROM (
    SELECT 
        code_val,
        -- 此处替换为你实际需要的排序规则,比如按表主键id、创建时间排序
        ROW_NUMBER() OVER (ORDER BY id ASC) AS rn
    FROM 你的实际表名
) AS temp

2. MySQL 8.0以下版本实现(不支持窗口函数的场景)

SELECT
    MAX(CASE WHEN rn = 1 THEN code_val END) AS col1,
    MAX(CASE WHEN rn = 2 THEN code_val END) AS col2,
    MAX(CASE WHEN rn = 3 THEN code_val END) AS col3,
    MAX(CASE WHEN rn = 4 THEN code_val END) AS col4,
    MAX(CASE WHEN rn = 5 THEN code_val END) AS col5,
    MAX(CASE WHEN rn = 6 THEN code_val END) AS col6
FROM (
    SELECT 
        code_val,
        @row_num := @row_num + 1 AS rn
    FROM 你的实际表名, (SELECT @row_num := 0) AS init
    -- 此处替换为你实际需要的排序规则
    ORDER BY id ASC
) AS temp

执行后输出结果就会匹配你需要的Null Half_day half_day Null Null Null格式,需要扩展更多列的话,只要在SELECT部分按序号新增对应的CASE WHEN分支即可。
如果行转列需要按其他字段分组(比如按用户id、日期分组,每组生成一行转列结果),只要在窗口函数里添加PARTITION BY 分组字段,外层查询末尾加上GROUP BY 分组字段即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 11:36:03