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
相關文章
相關標籤/搜索