如何學好java

          如何學好java,其實很簡單,只要用心體會,慢慢積累!
          posts - 106, comments - 7, trackbacks - 0, articles - 3
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          DB2行轉列

          Posted on 2011-12-07 10:36 哈希 閱讀(321) 評論(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語句創(chuàng)造虛擬字段,使結果集成為二維數組,然后應用聚合函數返回單一記錄。怎么樣?不理解,仔細看看下面的圖和分析下面的語句你就理解了。

           

          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章,想了解更全面的信息,大家可以參考。

           

           

          主站蜘蛛池模板: 邛崃市| 五莲县| 和硕县| 明光市| 太和县| 赤峰市| 井研县| 桃园市| 微山县| 类乌齐县| 阿尔山市| 横峰县| 嘉鱼县| 松溪县| 南郑县| 牙克石市| 长子县| 苍梧县| 吴川市| 内乡县| 忻城县| 郴州市| 辽阳县| 阜平县| 石景山区| 皋兰县| 忻城县| 乌拉特前旗| 台山市| 石家庄市| 孝义市| 鹰潭市| 巴青县| 保定市| 阿坝县| 宁阳县| 林周县| 抚顺市| 鹿邑县| 玉田县| 开平市|