SqlServer 动态行转列

 

有如下数据: (不一定只有这几个类别)

    姓名    科目        成绩        

    a        subject1    83

    a        subject2    74

    a        subject3    93

    b        subject1    70

    b        subject2    80

    b        subject3    90

  ....................

现要得到这样的数据

姓名    subject1    subject2    subject3  .......

a        83            74        93

b        70            80        90

可以使用如下sql达到效果

    declare @v_sql varchar(8000)

   set @v_sql= 'select 姓名 '

   select @v_sql=@v_sql+' , max(case 科目 when '''+ subject + ''' then 分数 else 0 end ) '+subject from ( select distinct 科目 as subject from table )  a 

    set @v_sql =' from table group by 姓名 '

    exec(@v_sql)

原文地址:https://www.cnblogs.com/xinyus/p/3368649.html