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

如何高效将宽表转为键值对?求助Unpivot缺失RecordId问题

解决SQL Unpivot扁平化宽表时缺失RecordId的问题

你的问题出在两个关键错误上:

  • 错误地将RecordId纳入了Unpivot需要转换的列列表中,导致它被拆成键值对而非作为每条记录的标识保留
  • 外层查询没有选择RecordId列

正确的Unpivot写法需要把RecordId作为非转换列保留,只对其他需要扁平化的列进行Unpivot操作。以下是修正后的代码:

select RecordId, [Key], [Value]
from
(
  SELECT RecordId, FirstName, LastName, Country, Grade
  FROM test
) src
unpivot
(
  [Value] for [Key] in ([FirstName],[LastName], [Country], [Grade])
) unpvt

代码说明:

  1. 子查询src明确指定保留RecordId,仅包含需要转换为键值对的列
  2. Unpivot的in列表仅包含需要扁平化的列(排除RecordId),这样RecordId会被自动复制到每一行结果中
  3. 外层查询同时选择RecordId、Key和Value,完全匹配你的目标表结构

这个写法是集合式操作,性能远优于游标逐行迭代的方式,能高效完成宽表扁平化的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 08:39:59