日期:2014-05-17  浏览次数:20620 次

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

------解决方案--------------------