如何使用SQL Server的unpivot功能将表格转换为键值对格式
SQL Server 宽表转键值对长表实现方案
你推测的UNPIVOT函数完全可以实现该需求,注意UNPIVOT要求所有被转换的列数据类型一致,本例中Age为INT类型,Name、Club为字符串类型,需要先做类型统一,具体实现代码如下:
方法1:使用UNPIVOT函数实现
SELECT PlayerCode, [Key], [Value] FROM ( -- 子查询统一字段类型,替换为你实际的原始表名 SELECT PlayerCode, Name, CAST(Age AS VARCHAR(10)) AS Age, Club FROM Player ) AS SourceTable UNPIVOT ( -- 定义输出的键、值字段名 [Value] FOR [Key] IN (Name, Age, Club) ) AS UnpivotResult
方法2:使用CROSS APPLY实现(更灵活)
如果需要自定义规则、后续扩展更方便,也可以用CROSS APPLY + VALUES的写法实现相同效果:
SELECT p.PlayerCode, t.[Key], t.[Value] FROM Player p CROSS APPLY ( VALUES ('Name', p.Name), ('Age', CAST(p.Age AS VARCHAR(10))), ('Club', p.Club) ) AS t([Key], [Value])
两种写法输出的结果完全符合你要求的结构,不需要额外调整。
内容的提问来源于stack exchange,提问作者YobBoy
相关产品推荐
相关产品推荐

