解析SQL Server中行轉列問題

iSQlServer發表於2009-02-24
行轉列問題主要分為兩類。

  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

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-557587/,如需轉載,請註明出處,否則將追究法律責任。

相關文章