有几种方法可以将数据行转换为列。
在 SQL Server 中,您可以使用 PIVOT 函数:
select batsman, [2012], [2011], [2010]
from 
(
  select batsman, runs, year
  from yourtable
) d
pivot
(
  sum(runs)
  for year in ([2012], [2011], [2010])
) piv;
或者您可以使用带有CASE表达式的聚合函数:
select batsman,
  sum(case when year = 2012 then runs else 0 end) [2012],
  sum(case when year = 2011 then runs else 0 end) [2011],
  sum(case when year = 2010 then runs else 0 end) [2010]
from yourtable
group by batsman;
如果您有已知数量的列,则另一个版本会很好用。但是,如果您要拥有未知数量的year值,那么您将需要使用动态 SQL:
DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX)
select @cols = STUFF((SELECT distinct ',' + QUOTENAME(year) 
                    from yourtable
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')
set @query = 'SELECT batsman,' + @cols + ' 
            from 
            (
                select batsman, runs, year
                from yourtable
            ) x
            pivot 
            (
                sum(runs)
                for year in (' + @cols + ')
            ) p '
execute(@query)