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

如何使用Pivot或Case语句在SQL中实现行转列

SQL行转列实现方案(将condition字段展开为多列)

源数据表

IDconditionstart timeend time
M01baseline15/06/201816/04/2015
M01tactical03/04/200106/12/2017
M02tactical30/06/200718/08/2002
M02baseline19/07/200106/09/2007
M03baseline09/12/201530/07/2014
M03tactical17/07/200209/05/2009

目标数据表

IDbaseline start timebaseline end timetactical start timetactical end time
M0115/06/201816/04/201503/04/200106/12/2017
M0219/07/200106/09/200730/06/200718/08/2002
M0309/12/201530/07/201417/07/200209/05/2009

实现方案1:使用CASE语句(通用型,适配多数数据库)

CASE是兼容性最强的行转列方式,不依赖特定数据库的PIVOT语法,适合跨数据库场景。

SELECT
    ID,
    MAX(CASE WHEN condition = 'baseline' THEN `start time` END) AS `baseline start time`,
    MAX(CASE WHEN condition = 'baseline' THEN `end time` END) AS `baseline end time`,
    MAX(CASE WHEN condition = 'tactical' THEN `start time` END) AS `tactical start time`,
    MAX(CASE WHEN condition = 'tactical' THEN `end time` END) AS `tactical end time`
FROM
    your_table_name
GROUP BY
    ID;

核心逻辑

  • 用CASE判断condition字段值,分别提取对应时间列的内容
  • 配合MAX聚合函数,将同一ID的多条记录合并为一行
  • 替换your_table_name为实际表名即可执行

实现方案2:使用PIVOT(以SQL Server为例)

如果使用支持PIVOT语法的数据库(如SQL Server、Oracle),可以用以下写法:

SELECT
    ID,
    [baseline_start] AS `baseline start time`,
    [baseline_end] AS `baseline end time`,
    [tactical_start] AS `tactical start time`,
    [tactical_end] AS `tactical end time`
FROM (
    SELECT
        ID,
        CONCAT(condition, '_start') AS time_type,
        `start time` AS time_value
    FROM your_table_name
    UNION ALL
    SELECT
        ID,
        CONCAT(condition, '_end') AS time_type,
        `end time` AS time_value
    FROM your_table_name
) AS src
PIVOT (
    MAX(time_value)
    FOR time_type IN ([baseline_start], [baseline_end], [tactical_start], [tactical_end])
) AS pvt;

核心逻辑

  • 先通过UNION ALL将start time和end time合并为同一列,同时标记对应的类型(如baseline_start)
  • 再用PIVOT将类型字段转换为列,通过聚合函数提取对应值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 21:18:21