解析SQL Server中行转列问题

kikiyaya 2010-07-17 10:40:22
本文将向大家介绍 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
[p=23, null, left]得出结果:
[p=23, null, left]  sid 语文 数学 英语
[p=23, null, left]  2005001 80.0 90.0 80.0
[p=23, null, left]  2005002 56.0 69.0 89.0
[p=23, null, left]  2)较为复杂的行转列:
[p=23, null, left]  表1:course
[p=23, null, left]  id name
[p=23, null, left]  1 语文
[p=23, null, left]  2 数学
[p=23, null, left]  3 英语
[p=23, null, left]  表2:result
[p=23, null, left]  id sid course result
[p=23, null, left]  1 2005001 语文 80.0
[p=23, null, left]  2 2005001 数学 90.0
[p=23, null, left]  3 2005001 英语 80.0
[p=23, null, left]  4 2005002 语文 56.0
[p=23, null, left]  5 2005002 数学 69.0
[p=23, null, left]  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)

[p=23, null, left]得出结果

[p=23, null, left]  sid 语文 数学 英语

[p=23, null, left]  2005001 80.0 90.0 80.0

[p=23, null, left]  2005002 56.0 69.0 89.0


文章来源:http://www.phphubei.com/thread-315-1-1.html
...全文
103 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
andy_liucj 2010-07-18
  • 打赏
  • 举报
回复
学习来的
jaydom 2010-07-17
  • 打赏
  • 举报
回复
。。。。。。。。。
bean_sql 2010-07-17
  • 打赏
  • 举报
回复
学习!
  • 打赏
  • 举报
回复

呵呵……
永生天地 2010-07-17
  • 打赏
  • 举报
回复
有点乱
hao1hao2hao3 2010-07-17
  • 打赏
  • 举报
回复
厉害!顶一个。
liangCK 2010-07-17
  • 打赏
  • 举报
回复
厉害.不会.学习.
yuxiuquan11 2010-07-17
  • 打赏
  • 举报
回复
我是来学习一下。呵呵
da21 2010-07-17
  • 打赏
  • 举报
回复
UP.....

34,587

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧