如何学好java

如何学好java,其实很简单,只要用心体会,慢慢积累!
posts - 106, comments - 7, trackbacks - 0, articles - 3
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

DB2行转列

Posted on 2011-12-07 10:36 哈希 阅读(312) 评论(0)  编辑  收藏 所属分类: sql 总结

 

  1. 班级  科目   分数  
  2. 1     语文   8800  
  3. 1     数学   8420  
  4. 1     英语   7812  
  5. ……  
  6. 2     语文   8715  
  7. 2     数学   8511  
  8. 2     英语   8512  
  9. ……  
  10.    
  11.    
  12. 要求转换成下面这样的结果  
  13. 班级    语文    数学    英语  
  14. 1       8800    8420    7812  
  15. 2       8715    8511    8512  

 

 

这是一个非常经典的 4属性的表设计模式,顾名思义,这样的表一般有四列,分别是:entity_id, attribute_name, attribute_type, attribute_value ,这样的设计使我们添加字段非常容易,如:我们想添加一个物理成绩是非常简单的,我们只要向表中插入一条记录即可。但是,这样的设计有一个非常严重的问题,那就是:查询难度增加,查询效率非常差。

要想实现上面的查询有一个原则,那就是:通过case语句创造虚拟字段,使结果集成为二维数组,然后应用聚合函数返回单一记录。怎么样?不理解,仔细看看下面的图和分析下面的语句你就理解了。

 

  1. create table score  
  2. (  
  3.     banji integer,  
  4.     kemu varchar(10),   
  5.     fengshu integer  
  6. )  
  7. go  
  8.    
  9. insert into score values  
  10. (1, '语文', 8800),  
  11. (1, '数学', 8420),  
  12. (1, '英语', 7812),  
  13. (2, '语文', 8715),  
  14. (2, '数学', 8511),  
  15. (2, '英语', 8512)  
  16. go  
  17.    
  18. select banji,  
  19.        max(yuwen)        语文,  
  20.        max(shuxue)       数学,  
  21.        max(yingyu)       英语  
  22. from    
  23.      (select  banji,  
  24.               case kemu  
  25.                when '语文' then fengshu  
  26.                else 0  
  27.              end                         yuwen,  
  28.              case kemu  
  29.                when '数学' then fengshu  
  30.                else 0  
  31.              end                         shuxue,  
  32.              case kemu  
  33.                when '英语' then fengshu  
  34.                else 0  
  35.              end                         yingyu  
  36.       from score  
  37.       ) as inner  
  38. group by inner.banji  
  39. order by 1  
  40. go  

 

 

你可能正在感叹,这样的解决方案是多么的巧妙,可惜不是我想出来的,在这里,我也不敢把大师的思想据为己有,以上思想来自<SQL语言艺术>的第11章,想了解更全面的信息,大家可以参考。

 

 


只有注册用户登录后才能发表评论。


网站导航: