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

如何对该表格执行Unpivot操作?尝试后未获期望输出

实现表格转置(Unpivot)的正确方法

假设你的基础表包含唯一标识列(比如ID)和多个季度列(比如Q1、Q2、Q3、Q4),下面提供两种可靠的转置方案,帮你得到目标格式的表格:

方法一:用SQL原生UNPIVOT(适用于SQL Server、Oracle等支持的数据库)

如果之前用UNPIVOT失败,大概率是被转置的列数据类型不一致,或者需要保留NULL值。先确保Q1到Q4列数据类型统一,再执行以下语句:

SELECT ID, Quarter, Value
FROM BaseTable
UNPIVOT
(
  Value FOR Quarter IN (Q1, Q2, Q3, Q4)
) AS UnpivotResult;

注意:UNPIVOT会自动忽略NULL值,如果需要保留空值,建议用下面的方法二。

方法二:用UNION ALL实现转置(通用所有数据库,支持保留NULL)

这种方案兼容性极强,任何数据库都能运行,还能完整保留空值:

SELECT ID, 'Q1' AS Quarter, Q1 AS Value FROM BaseTable
UNION ALL
SELECT ID, 'Q2' AS Quarter, Q2 AS Value FROM BaseTable
UNION ALL
SELECT ID, 'Q3' AS Quarter, Q3 AS Value FROM BaseTable
UNION ALL
SELECT ID, 'Q4' AS Quarter, Q4 AS Value FROM BaseTable
ORDER BY ID, Quarter;

针对MySQL的替代写法

MySQL没有原生UNPIVOT功能,可以用交叉连接的方式实现:

SELECT 
  ID,
  CASE seq 
    WHEN 1 THEN 'Q1'
    WHEN 2 THEN 'Q2'
    WHEN 3 THEN 'Q3'
    WHEN 4 THEN 'Q4'
  END AS Quarter,
  CASE seq
    WHEN 1 THEN Q1
    WHEN 2 THEN Q2
    WHEN 3 THEN Q3
    WHEN 4 THEN Q4
  END AS Value
FROM BaseTable
CROSS JOIN (SELECT 1 AS seq UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4) AS seq_num
ORDER BY ID, Quarter;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 06:50:21