这个问题在这里已经有了答案:
8年前关闭。
Possible Duplicate:
SQL Server dynamic PIVOT query?
是否可以对下表执行查询:
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 -
它将每个不同的玩家变成一个列,并对游戏进行分组,给出每个玩家每场比赛的目标。
最佳答案
您可以使用 PIVOT
功能。如果您有已知数量的列,则可以对这些值进行硬编码:
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:
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
关于sql - 将不同的行属性转置/旋转为列并将另一个属性分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13188158/