手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>网络编程>Mssql>列表

解析SQL Server中行转列问题

来源:互联网 作者:west263.com 时间:2008-04-02
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

  行转列问题主要分为两类。

  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


文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!