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

如何使用SQL实现steps表行转列,将行数据转换为新表对应列

SQL行转列实现方案

通用兼容写法(支持MySQL、PostgreSQL、SQL Server、Oracle等所有主流数据库)

使用CASE WHEN条件判断 + 聚合函数的方式实现,兼容性最强:

SELECT
  ID,
  MAX(CASE WHEN Steps = 'Create' THEN Steps_Date END) AS `Create`,
  MAX(CASE WHEN Steps = 'Request' THEN Steps_Date END) AS `Request`,
  MAX(CASE WHEN Steps = 'Schedule' THEN Steps_Date END) AS `Schedule`,
  MAX(CASE WHEN Steps = 'Complete' THEN Steps_Date END) AS `Complete`
FROM steps
GROUP BY ID;

原理说明:按ID分组后,CASE WHEN会匹配对应步骤的日期,不匹配的返回NULL,再通过MAX聚合函数取出每个步骤唯一的非NULL日期值,完全符合预期输出要求。

如果使用MySQL数据库,还可以用IF函数简化写法:

SELECT
  ID,
  MAX(IF(Steps = 'Create', Steps_Date, NULL)) AS `Create`,
  MAX(IF(Steps = 'Request', Steps_Date, NULL)) AS `Request`,
  MAX(IF(Steps = 'Schedule', Steps_Date, NULL)) AS `Schedule`,
  MAX(IF(Steps = 'Complete', Steps_Date, NULL)) AS `Complete`
FROM steps
GROUP BY ID;

特定数据库PIVOT语法实现

SQL Server、Oracle、PostgreSQL 11及以上版本支持原生PIVOT行转列语法,写法更简洁,以SQL Server为例:

SELECT * 
FROM steps
PIVOT (
  MAX(Steps_Date)
  FOR Steps IN ([Create], [Request], [Schedule], [Complete])
) AS pivot_result;

注意事项

以上写法仅适用于Steps字段的取值固定为Create、Request、Schedule、Complete的场景。如果Steps的取值是动态变化的,需要编写动态SQL拼接查询语句实现。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 23:06:05