写sql,怎么将查询结果的行列转换呀?
3个回答
展开全部
例如表cj
名字 科目 分数
A 语文 100
A 数学 90
A 外语 99
B 语文 90
B 数学 80
B 外语 100
方法 (一)
select * from cj
select 名字, max(case 科目 when '语文' then 分数 else 0 end ) 语文,
max(case 科目 when '数学' then 分数 else 0 end ) 数学,
max(case 科目 when '外语' then 分数 else 0 end ) 外语
from cj
group by 名字
方法 (二)
declare @sql varchar(800)
set @sql='select 名字'
select @sql =@sql+', max(case 科目 when '''+科目+''' then 分数 else 0 end )['+科目+']'
from (select distinct 科目 from cj ) as a
set @sql=@sql+'from cj group by 名字'
exec(@sql)
结果:
名字 语文 数学 外语
A 100 90 99
B 90 80 100
名字 科目 分数
A 语文 100
A 数学 90
A 外语 99
B 语文 90
B 数学 80
B 外语 100
方法 (一)
select * from cj
select 名字, max(case 科目 when '语文' then 分数 else 0 end ) 语文,
max(case 科目 when '数学' then 分数 else 0 end ) 数学,
max(case 科目 when '外语' then 分数 else 0 end ) 外语
from cj
group by 名字
方法 (二)
declare @sql varchar(800)
set @sql='select 名字'
select @sql =@sql+', max(case 科目 when '''+科目+''' then 分数 else 0 end )['+科目+']'
from (select distinct 科目 from cj ) as a
set @sql=@sql+'from cj group by 名字'
exec(@sql)
结果:
名字 语文 数学 外语
A 100 90 99
B 90 80 100
2012-03-25
展开全部
有意思的问题 给出一个参考的URL: 假设你表是这样的结构部件 入库日期 入库数量 A 1/1 10 A 1/1 5 A 1/2 10 B 1/5 10 其实就是两种方法,假设你的数据库是11以前的,只能先定义好查哪天到哪天 然后那么 selct 部件, sum( decode(入库日期=1号,入库数量,0), sum( decode(入库日期=2号,入库数量,0), 以此类推 from 入库表 group BY 部件(原理上就是将不是这天的变成0,再合计)要是Oracle数据库是11的话,就简单了,直接pivot搞定 pivot语法就不说了,网上一堆一堆的
~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
看看这个链接对你有没有帮助
参考资料: http://wenku.baidu.com/view/5dda306127d3240c8447efb1.html
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询