sql server中的行转列

本文将向你们介绍 SQL Server 中行转列问题的终极解决方案,主要应用case语句来解决行转列的问题,下面就一块儿来看看。
  行转列问题主要分为两类。
  1)简单的行转列问题:
  示例表:
  id   sid   course   result
  1  2005001 语文    80.0
  2  2005001 数学    90.0
  3  2005001 英语    80.0
  4  2005002 语文    56.0
  5  2005002 数学    69.0
  6  2005002 英语    89.0
  执行:

如下是引用片断:
  select sid,语文=isnull(sum(case course when '语文' then result end),0),
  数学=isnull(sum(case course when '数学' then result end),0),
  英语=isnull(sum(case course when '英语' then result end),0)
  from result
  group by sid
  order by sid

  得出结果:
  sid       语文   数学   英语
  2005001  80.0  90.0  80.0
  2005002  56.0  69.0  89.0
  2)较为复杂的行转列
  表1:course
  id name
  1 语文
  2 数学
  3 英语
  表2:result
  id   sid   course   result
  1  2005001  语文    80.0
  2  2005001  数学    90.0
  3  2005001  英语    80.0
  4  2005002  语文    56.0
  5  2005002  数学    69.0
  6  2005002  英语    89.0

如下是引用片断:
  declare @sql varchar(8000)
  set @sql='select sid'
  select @sql=@sql+','+course.name+'=isnull(sum(case course when '''+course.name+''' then result end),0)'
  from course order by id
  set @sql=@sql+' from result group by sid order by sid'
  print @sql
  exec(@sql)

  得出结果
  sid       语文    数学   英语
  2005001  80.0  90.0  80.0
  2005002  56.0  69.0  89.0
相关文章
相关标签/搜索