sql - 将列值转换为列名 SQL server
问题描述
我有一个具有以下架构的表。希望在 SQL Server 中获得与预期结果相同的结果。Pivot 不起作用,因为 Value 列是字符串。请提出有效的方法来实现这一目标。谢谢!
桌子:
Dim Key(String) , Dim Value (String)
AB XY1
AB XY2
CD XY3
CD XY4
预期结果
New columns=> AB CD
Row values => XY1 XY3
XY2 XY4
解决方案
你想要row_number()
:
select max(case when key = 'ab' then Value end) as ab,
max(case when key = 'cd' then Value end) as cd
from (select t.*,
row_number() over (partition by key order by Value) as seq
from table t
) t
group by seq;
但是,您的pivot
版本也应该与row_number()
.
编辑 :
select tt.*
from (select t.*,
row_number() over (partition by [key] order by Value) as seq
from table t
) as t pivot
( max(value) for [key] in ([ab], [cd])
) tt;
推荐阅读
- sql - SQL查询段正值和负值并对不同名称的值求和
- javascript - 我可以在 React Native 中运行原始 CURL 命令吗?
- java - 将用户输入与文本文件进行比较(读取文本文件)
- amazon-web-services - AWS Cognito 托管 UI 和使用授权代码 OAuth 流放大身份验证
- angular - 在 Angular 中自定义共享组件
- c++ - 如何在 C++ 中更改 printf("%.2f")
- bash - 完成进程时关闭 WM/Xorg 的 bash 脚本/方法
- javascript - epub.js 设置字体大小
- python-3.x - 尝试在 python 3 中复制列表时未调用函数
- python - 在 Python 中将文本文件转换为 JSON