交叉表,为什么不行?
drop   table   if   exists   Test; 
 create   table   Test( 
 `id`   int   not   null   auto_increment   primary   key, 
 `name`   varchar(50)   not   null, 
 `subject`   varchar(50)   null, 
 `score`   int   null 
 )engine=myisam;   
 insert   into   test(`name`,`subject`,`score`)   values( 'zhangsan ', 'chinese ',60); 
 insert   into   test(`name`,`subject`,`score`)   values( 'zhangsan ', 'math ',75); 
 insert   into   test(`name`,`subject`,`score`)   values( 'zhangsan ', 'engish ',90);   
 insert   into   test(`name`,`subject`,`score`)   values( 'lisi ', 'chinese ',80); 
 insert   into   test(`name`,`subject`,`score`)   values( 'lisi ', 'math ',90); 
 insert   into   test(`name`,`subject`,`score`)   values( 'lisi ', 'engish ',50);     
 select   `name`,sum(case   `subject`   when    'chinese '   then   score   else   0   end)   as    'chinese ', 
 sum(case   `subject`   when    'math '   then   score   else   0   end)   as    'math ', 
 sum(case   `subject`   when    'engish '   then   score   else   0   end)   as    'engish ' 
 from   test 
 group   by   `name`   
 查询结果跟原数据有点出入..
------解决方案--------------------没有出入。 
 你要像按照顺序排的话,可以:   
 select * from test; 
 select `name`,sum(case `subject` when  'chinese ' then score else 0 end) as  'chinese ', 
 sum(case `subject` when  'math ' then score else 0 end) as  'math ', 
 sum(case `subject` when  'engish ' then score else 0 end) as  'engish ' 
 from test 
 group by `name` order by id;     
 query result(2 records) 
 name chinese math engish  
 zhangsan 60 75 90  
 lisi 80 90 50