首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

sql列转行有关问题

2013-07-04 
sql列转行问题姓名 语文 数学 物理张三 74  83  93李四 74  84  94想变成 NameSubject Result---------- -

sql列转行问题
姓名 语文 数学 物理
张三 74  83  93
李四 74  84  94

想变成 
Name       Subject Result      
---------- ------- ----------- 
李四         语文      74
李四         数学      84
李四         物理      94
张三         语文      74
张三         数学      83
张三         物理      93
*/

create table tb1
(
   姓名 varchar(10) ,
   语文 int ,
   数学 int ,
   物理 int
)

insert into tb1(姓名 , 语文 , 数学 , 物理) values('张三',74,83,93);
insert into tb1(姓名 , 语文 , 数学 , 物理) values('李四',74,84,94);

select * from
(
  select 姓名 as Name , Subject = '语文' , Result = 语文 from tb1 
  union all
  select 姓名 as Name , Subject = '数学' , Result = 数学 from tb1
  union all
  select 姓名 as Name , Subject = '物理' , Result = 物理 from tb1
) t
order by name , case Subject when '语文' then 1 when '数学' then 2 when '物理' then 3 when '总分' then 4 end;

该语句我再Oracle和MySql中执行都出错,MySql异常如下:
Unknown column 'Subject' in 'field list'

是“select 姓名 as Name , Subject = '语文' , Result = 语文 from tb1 ”这条语句语法错误吗?
可是百度搜索里转换行,大都是这样的结果啊,求高手帮忙解决啊 SQL MySQL Oracle
------解决方案--------------------


select * from (
 select 姓名 as Name , '语文' Subject   , 语文 Result   from tb1
 union all
 select 姓名 as Name , '数学' Subject  , 数学 Result   from tb1
 union all
 select 姓名 as Name , '物理' Subject , 物理 Result   from tb1) t
order by t.name
;

热点排行