把列变成行的sql语句

时间:2021-10-30 18:09:20

 现有如下表:

  科目   分数    姓名
  语文     88      董兆
  数学    95       董兆
  英语     89      董兆

  语文     69      婵娟
  数学    95       婵娟
  英语     89      婵娟

  语文     69      李慧
  数学    95       李慧
  英语     89      李慧

一条sql语句,查询结果是

         李慧 婵娟 董兆
  语文   69    69   88
  数学   95     95  95
  英语   89    89   89


sql语句如下:

create table k(科目 varchar(50),分数 int,姓名 varchar(50))
insert k select '语文',88,'董兆'
union all select '数学',95,'董兆'
union all select '英语',89,'董兆'
union all select '语文',69,'婵娟'
union all select '数学',95,'婵娟'
union all select '英语',89,'婵娟'
union all select '语文',69,'李慧'
union all select '数学',95,'李慧'
union all select '英语',89,'李慧'

declare @s varchar(8000)
set @s='select 科目'
select @s=@s+',['+姓名+']=sum(case 姓名 when '''+姓名+''' then 分数 else 0 end)'
from k group by 姓名
exec(@s+'from k group by 科目')