行转列测试数据: --测试数据 if not object_id(N'Tempdb..#T') is null drop table #T Go Create table #T([Name] nvarchar(22),[Subject] nvarchar(22),[Score] int) Insert #T select N'李四',N'语文',60 union all select N'李四',N'数学',70 union all select N'李四',N'英语',80 union all select N'张三',N'语文',90 union all select N'张三',N'数学',80 union all select N'张三',N'英语',70 Go --测试数据结束 动态写法(加上了总分和平均分): DECLARE @sql VARCHAR(MAX) SET @sql = 'select Name' SELECT @sql = @sql + ',max(case Subject when ''' + Subject + ''' then Score else 0 end)[' + Subject + ']' FROM ( SELECT DISTINCT Subject FROM #T ) a SET @sql = @sql + ',sum(Score) 总分