软件频道>程序开发>JavaVBVCDelphiC/C++Web开发微软专栏移动数据库程序人生软件工程|开发客
您现在的位置: 天极网 > 开发频道 > SQL Server中行转列问题的终极解决
全文

SQL Server中行转列问题的终极解决

2007-10-19 10:01作者:mndn_nana出处:论坛整理责任编辑:幽灵

  本文将向大家介绍 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

  点击查看原文>>

相关搜索:
关注此文读者还看过
文章排行
本周
本月
最近更新
关于我们|About us|网站律师|天极服务|电子杂志|RSS订阅|加入我们|网站地图
TMG
Copyright (C) 1999-2009 Chinabyte.com, All Rights Reserved 版权所有 天极网络
商务联系、网站内容、合作建议:010-82657868
版权声明 在线提交意见反馈 渝ICP证B2-20030003号
经营性网站备案信息 网警备案 中国网站排名
天极传媒:天极网|比特网|IT专家网|IT商网|52PK游戏网|IT分众