如何在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;
执行后就能得到你期望的结果:
| File | Path |
|---|---|
| A | aValue |
| B | bValue |
| C | cValue |
| D | dValue |
方法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
相关产品推荐
相关产品推荐

