Transpose / Pivot distinct row attribute as column and group another attribute?(将不同的行属性转置/旋转为列并将另一个属性分组?)
问题描述
可能重复:
SQL Server 动态 PIVOT 查询?
是否可以对下表执行查询:
Is it possible to execute a query on the following table:
Game Player Goals
----- ------ ------
Game1 John 1
Game1 Paul 0
Game1 Mark 2
Game1 Luke 1
Game2 John 3
Game2 Paul 1
Game2 Luke 1
Game3 John 0
Game3 Mark 2
结果如下:
Game John Paul Mark Luke
----- ---- ---- ---- ----
Game1 1 0 2 1
Game2 3 1 - 1
Game3 0 - 2 -
它将每个不同的玩家变成一列,并将游戏分组,为每位玩家提供每场比赛的目标.
It turns each distinct player into a column and groups the games gives goals per game per player.
推荐答案
可以使用PIVOT
函数.如果您有已知数量的列,那么您可以对这些值进行硬编码:
You can use the PIVOT
function. If you have a known number of columns, then you can hard-code the values:
select *
from
(
select game, player, goals
from yourtable
) src
pivot
(
sum(goals)
for player in ([John], [Paul], [Mark], [Luke])
) piv
order by game
参见 SQL Fiddle with Demo
如果你有未知数量的列,那么你可以使用动态sql:
If you have an unknown number of columns, then you can use dynamic sql:
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT distinct ',' + QUOTENAME(player)
from yourtable
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT game, ' + @cols + ' from
(
select game, player, goals
from yourtable
) x
pivot
(
sum(goals)
for player in (' + @cols + ')
) p '
execute(@query)
参见 SQL Fiddle with Demo
这篇关于将不同的行属性转置/旋转为列并将另一个属性分组?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:将不同的行属性转置/旋转为列并将另一个属性分组?


- 如何将 Byte[] 插入 SQL Server VARBINARY 列 2021-01-01
- 在SQL中,如何为每个组选择前2行 2021-01-01
- 如何将 SonarQube 6.7 从 MySQL 迁移到 postgresql 2022-01-01
- 以一个值为轴心,但将一行上的数据按另一行分组? 2022-01-01
- SQL 临时表问题 2022-01-01
- 远程 mySQL 连接抛出“无法使用旧的不安全身份验证连接到 MySQL 4.1+"来自 XAMPP 的错误 2022-01-01
- 更改自动增量起始编号? 2021-01-01
- 使用 Oracle PL/SQL developer 生成测试数据 2021-01-01
- 导入具有可变标题的 Excel 文件 2021-01-01
- 如何使用 pip 安装 Python MySQLdb 模块? 2021-01-01