sql server行转列问题终极解决 _MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 1872 | 回复: 0   主题: sql server行转列问题终极解决         下一篇 
shary
注册用户
等级:新兵
经验:54
发帖:66
精华:0
注册:2011-8-31
状态:离线
发送短消息息给shary 加好友    发送短消息息给shary 发消息
发表于: IP:您无权察看 2015-12-21 16:47:26 | [全部帖] [楼主帖] 楼主

主要应用case语句来解决行转列的问题

行转列问题主要分为两类

1)简单的行转列问题:

示例表:

id  sid        course  result
1   2005001 语文     80.02   
2   2005001 数学     90.03   
3   2005001 英语     80.04   
4   2005002 语文     56.05   
5   2005002 数学     69.06   
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.02 
2 2005001 数学      90.03 
3 2005001 英语      80.04 
4 2005002 语文      56.05 
5 2005002 数学      69.06 
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



--转自



赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论