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

如何使用Pivot/Unpivot将SQL结果集列名转换为独立的Name/Value列

可行解决方案

该需求属于标准的列转行场景,有两种常用的实现方式,可根据你使用的数据库选型:

方法1:原生UNPIVOT语法(适配Oracle、SQL Server、PostgreSQL 12+等支持UNPIVOT的数据库)

无需手动硬编码列名映射,语法自带提取原列名作为行值的能力,示例代码如下(假设你的原结果集来自表user_info):

SELECT 
  Name,
  Value
FROM user_info
UNPIVOT (
  Value FOR Name IN (Username, Birthday, Gender)
) AS unpivot_result;

执行后输出结果完全匹配你的要求:Name列自动填充IN子句中声明的原列名,Value列填充对应列的取值。

方法2:UNION ALL通用实现(适配所有数据库,包括MySQL、SQLite等不支持UNPIVOT的数据库)

如果所用数据库没有内置UNPIVOT能力,可以用UNION ALL手动拼接查询,兼容性更强:

SELECT 'Username' AS Name, Username AS Value FROM user_info
UNION ALL
SELECT 'Birthday' AS Name, Birthday AS Value FROM user_info
UNION ALL
SELECT 'Gender' AS Name, Gender AS Value FROM user_info;

如果原表有多条数据,两种方案都会自动为每条原数据生成对应的3行转置结果。如果需要仅转置特定行,可以在子查询中先加过滤条件再执行转置操作,示例:

-- 仅转置Username为Tom的单条数据
SELECT 
  Name,
  Value
FROM (
  SELECT * FROM user_info WHERE Username = 'Tom'
) AS filter_result
UNPIVOT (
  Value FOR Name IN (Username, Birthday, Gender)
) AS unpivot_result;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 16:54:01