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

如何在SQL中转置表格?UNPIVOT是唯一选项吗?

实现SQL行转列的两种方法(纠正UNPIVOT误解)

先纠正你的误解

UNPIVOT 不需要聚合函数,它的核心作用就是将横向的多列转换为纵向的多行,和用于行转列的PIVOT不同——PIVOT因为要合并多行数据到列中才需要聚合,而UNPIVOT只是拆分列,完全不需要聚合操作。

方法1:使用UNPIVOT(适用于SQL Server等支持该语法的数据库)

假设你的表名为YourTable,先通过子查询筛选出目标单行数据,再用UNPIVOT转置,最后提取列名前缀得到File列:

SELECT LEFT(File, 1) AS File, Path
FROM (
    -- 子查询:筛选出你需要的单行数据
    SELECT [A Path], [B Path], [C Path], [D Path]
    FROM YourTable
    WHERE -- 替换成你的匹配条件,比如 ID = '123'
) AS SourceTable
UNPIVOT (
    -- Path:转置后存储原列值的列名
    -- File:转置后存储原列名的列名
    Path FOR File IN ([A Path], [B Path], [C Path], [D Path])
) AS UnpivotResult;

执行后就能得到你期望的结果:

FilePath
AaValue
BbValue
CcValue
DdValue

方法2:使用UNION ALL(通用所有数据库)

如果你的数据库不支持UNPIVOT(比如MySQL),可以用UNION ALL逐个列转换:

-- 逐个提取每一列,用UNION ALL合并结果
SELECT 'A' AS File, [A Path] AS Path FROM YourTable WHERE 你的匹配条件
UNION ALL
SELECT 'B' AS File, [B Path] AS Path FROM YourTable WHERE 你的匹配条件
UNION ALL
SELECT 'C' AS File, [C Path] AS Path FROM YourTable WHERE 你的匹配条件
UNION ALL
SELECT 'D' AS File, [D Path] AS Path FROM YourTable WHERE 你的匹配条件;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 05:52:43