ITPub博客

首页 > 数据库 > Oracle > oracle 竖表,横表(a stupid way,want the smart way)

oracle 竖表,横表(a stupid way,want the smart way)

原创 Oracle 作者:zenzuguo 时间:2008-10-10 19:48:49 0 删除 编辑

竖表->横表

select a.user_ohr_id sso, max(decode(a.change_type_id,1, b.change_type_desc,'')) t1, max(decode(a.change_type_id,2, b.change_type_desc,'')) t2, max(decode(a.change_type_id,3, b.change_type_desc,'')) t3, max(decode(a.change_type_id,4, b.change_type_desc,'')) t4, max(decode(a.change_type_id,5, b.change_type_desc,'')) t5, max(decode(a.change_type_id,6, b.change_type_desc,'')) t6, max(decode(a.change_type_id,7, b.change_type_desc,'')) t7 from occr_user_changetype a ,occr_change_type b where a.change_type_id = b.change_type_id group by a.user_ohr_id

横表->竖表

select change_type_id,change_type_desc from occr_change_type
union all
select change_type_id,change_type_detail from occr_change_type
order by change_type_id

another way:(complex)

Create table test (name char(10),km char(10),cj int)
go
insert test values('张三','语文',80)
insert test values('张三','数学',86)
insert test values('张三','英语',75)
insert test values('李四','语文',78)
insert test values('李四','数学',85)
insert test values('李四','英语',78)

想变成

姓名 语文 数学 英语
张三 80 86 75
李四 78 85 78


declare @sql varchar(8000)
set @sql = 'select name'
select @sql = @sql + ',sum(case km when '''+km+''' then cj end) ['+km+']'
from (select distinct km from test) as a
select @sql = @sql+' from test group by name'
exec(@sql)

drop table test
drop table table1
go

[@more@]

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/106285/viewspace-1011730/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2012-12-30

  • 博文量
    84
  • 访问量
    844566