sql-server - 在 SQL Server 中按组将行透视到列
问题描述
我正在寻找可以使用 SQL Server 2008 中的 group by 将行转换为列的代码。
这是我的桌子:
Name | Stdy | Val
-------+---------+-------
Kunjan | Technic | 80
Kunjan | Sains | 90
Kunjan | Sport | 60
Shone | Technic | 60
Shone | Sains | 80
Shone | Sport | 70
Peudd | Technic | 85
Peudd | Sains | 75
Peudd | Sport | 90
我最终想要显示的是这样的(对于上面的数据):
Stdy | Kunjan | Shone | Peudd
--------+--------+-------+-------
Technic | 80 | 60 | 85
Sains | 90 | 80 | 75
Sport | 60 | 70 | 90
任何帮助,将不胜感激。
提前致谢。
解决方案
这可以使用PIVOT
运算符来完成
select *
from yourtable
pivot
(
max(Val)
for Name in ([Kunjan], [Shone], [Peudd])
) p
或条件CASE
语句。例子很多,随便搜一下
编辑:对于动态案例
declare @sql nvarchar(max),
@col nvarchar(max)
select @col = isnull(@col + ',', '') + Name
from yourtable
group by Name
print @col
select @sql =
'
select *
from youtable
pivot
(
max(Val)
for Name in (' + @col + ')
) p
'
print @sql
exec sp_executesql @sql
推荐阅读
- opencl - 在 Windows 上使用 clBuildProgram 加载 SPIR 二进制文件
- html - 等待“背景图像”css 样式完全加载
- javascript - React:在 URI 更改时加载和更新嵌套资源而没有过多的重复?
- java - 有没有办法在绑定之前将 JSON 值大写 - 使用 SpringBoot?
- python - pandas 和 seaborn 中的数据太大。如何创建“其他”列?
- json - 检查包含大日期的json文件中字段的格式
- session - 为什么用户名没有保存在 Clojure 项目的 noir 会话中?
- heroku - Heroku Postgres 是否提供逻辑解码?
- android - 从适配器刷新片段
- python - Spyder 找不到安装了 anaconda 的模块