是否可以对下表执行查询:
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功能。如果您具有已知的列数,则可以对值进行硬编码:
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
如果列数未知,则可以使用动态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)