如何學(xué)好java

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

          DB2行轉(zhuǎn)列

          Posted on 2011-12-07 10:36 哈希 閱讀(321) 評論(0)  編輯  收藏 所屬分類: sql 總結(jié)

           

          1. 班級  科目   分數(shù)  
          2. 1     語文   8800  
          3. 1     數(shù)學(xué)   8420  
          4. 1     英語   7812  
          5. ……  
          6. 2     語文   8715  
          7. 2     數(shù)學(xué)   8511  
          8. 2     英語   8512  
          9. ……  
          10.    
          11.    
          12. 要求轉(zhuǎn)換成下面這樣的結(jié)果  
          13. 班級    語文    數(shù)學(xué)    英語  
          14. 1       8800    8420    7812  
          15. 2       8715    8511    8512  

           

           

          這是一個非常經(jīng)典的 4屬性的表設(shè)計模式,顧名思義,這樣的表一般有四列,分別是:entity_id, attribute_name, attribute_type, attribute_value ,這樣的設(shè)計使我們添加字段非常容易,如:我們想添加一個物理成績是非常簡單的,我們只要向表中插入一條記錄即可。但是,這樣的設(shè)計有一個非常嚴重的問題,那就是:查詢難度增加,查詢效率非常差。

          要想實現(xiàn)上面的查詢有一個原則,那就是:通過case語句創(chuàng)造虛擬字段,使結(jié)果集成為二維數(shù)組,然后應(yīng)用聚合函數(shù)返回單一記錄。怎么樣?不理解,仔細看看下面的圖和分析下面的語句你就理解了。

           

          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, '數(shù)學(xué)', 8420),  
          12. (1, '英語', 7812),  
          13. (2, '語文', 8715),  
          14. (2, '數(shù)學(xué)', 8511),  
          15. (2, '英語', 8512)  
          16. go  
          17.    
          18. select banji,  
          19.        max(yuwen)        語文,  
          20.        max(shuxue)       數(shù)學(xué),  
          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 '數(shù)學(xué)' 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  

           

           

          你可能正在感嘆,這樣的解決方案是多么的巧妙,可惜不是我想出來的,在這里,我也不敢把大師的思想據(jù)為己有,以上思想來自<SQL語言藝術(shù)>的第11章,想了解更全面的信息,大家可以參考。

           

           

          主站蜘蛛池模板: 鄂托克旗| 定南县| 黄平县| 正定县| 丹寨县| 阿荣旗| 桂林市| 开原市| 钦州市| 枣阳市| 陵川县| 闽侯县| 罗定市| 安宁市| 景宁| 台东县| 克什克腾旗| 阿图什市| 桂平市| 绿春县| 白玉县| 衡阳县| 永修县| 巨野县| 密山市| 孟连| 涞源县| 额敏县| 当雄县| 临桂县| 西丰县| 泸西县| 辽源市| 中方县| 香港| 阜平县| 汤阴县| 错那县| 饶河县| 娄底市| 金堂县|