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

Oracle数据库中如何基于指定列实现行转列?

数据表行转列实现方案

通用兼容方案

以下写法适配绝大多数主流数据库(MySQL、PostgreSQL、SQL Server、Oracle等),不需要依赖数据库专属语法:

SELECT 
    id,
    date,
    name,
    MAX(CASE WHEN type = '类型1' THEN type END) AS 类型1,
    MAX(CASE WHEN type = '类型2' THEN type END) AS 类型2,
    MAX(CASE WHEN type = '类型3' THEN type END) AS 类型3
    -- 有多少种type的可选值,就新增对应数量的CASE WHEN语句即可
FROM 你的实际表名
GROUP BY id, date, name;
  • 实现逻辑:先按照id、date、name三个公共维度分组,每组内通过CASE WHEN判断type值匹配情况,匹配到对应类型就返回值,不匹配默认返回空,最后通过MAX聚合函数过滤掉空值,即可得到一行对应唯一id+date+name组合的转列结果。

特定数据库简化写法

MySQL

可以用IF函数简化判断逻辑:

SELECT 
    id,
    date,
    name,
    MAX(IF(type = '类型1', type, NULL)) AS 类型1,
    MAX(IF(type = '类型2', type, NULL)) AS 类型2,
    MAX(IF(type = '类型3', type, NULL)) AS 类型3
FROM 你的实际表名
GROUP BY id, date, name;

PostgreSQL

可以用FILTER语法简化条件过滤:

SELECT 
    id,
    date,
    name,
    MAX(type) FILTER (WHERE type = '类型1') AS 类型1,
    MAX(type) FILTER (WHERE type = '类型2') AS 类型2,
    MAX(type) FILTER (WHERE type = '类型3') AS 类型3
FROM 你的实际表名
GROUP BY id, date, name;

补充说明:如果type字段的取值不固定,无法提前枚举所有可能值,需要使用动态SQL生成查询语句,不同数据库的动态SQL语法有差异,可根据你使用的数据库类型查找对应动态行转列的实现方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 10:33:01