if not object_id('stuid') is null
drop table stuid
Go
Create table stuid([学号] varchar(20),[科目] nvarchar(2),[成绩] int)
Insert stuid
select N'0101',N'语文',75 union all
select N'0102',N'语文',70 union all
select N'0103',N'语文',90 union all
select N'0101',N'数学',89 union all
select N'0102',N'数学',80 union all
select N'0103',N'数学',99 union all
select N'0101',N'英语',89 union all
select N'0102',N'英语',79 union all
select N'0103',N'英语',67
Go
select
学号,
语文= sum(case when 科目='语文' then 成绩 else 0 end),
数学=sum(case when 科目='数学' then 成绩 else 0 end),
英语=sum(case when 科目='英语' then 成绩 else 0 end),
SUM(成绩) 总成绩
from stuid
group by 学号
学号 语文 数学 英语 总成绩
0101 75 89 89 253
0102 70 80 79 229
0103 90 99 67 256
declare @s nvarchar(4000)
Select @s=isnull(@s+',','')+quotename([科目]) from stuid group by [科目]
exec('select [学号],'+@s+',[总成绩] from (select *,[总成绩]=sum([成绩])over(partition by [学号]) from stuid ) a
pivot (max([成绩]) for [科目] in('+@s+'))b ')
学号 数学 英语 语文 总成绩
0102 80 79 70 229
0101 89 89 75 253
0103 99 67 90 256