<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    冷面閻羅

    低調做人&&高調做事
    隨筆 - 208, 文章 - 3, 評論 - 593, 引用 - 0
    數據加載中……

    ORACLE數據統計0的處理

              大概是前一周去見客戶,他要弄了年終統計報表,從系統中所有臺帳的基礎數據去統計總算、容量等數據。
             拿到統計模板一看,傻眼了需要統計近百項,而且每一項都需要單獨使用SQL去查詢。
             起初  為了方便查詢數據,中間視圖套用視圖,結果發現我嵌套了3層視圖,效率實在不敢恭維。
             后來 為了提高效率,就把中間的視圖去掉,改為從表查詢數據,結果每個項需要查詢3~4表,效率比第一次提升不少。其實查詢這種統計數據,千萬不能視圖套用視圖,那效率就沒的說了。

            程序實現,發現使用count(*)統計總數的時候,如沒有則顯示0;使用sum()統計,則沒有不顯示,這樣我前臺頁面上有的沒有數據顯示0,有的沒有數據不顯示,不統一也不美觀。
       
           改造1,在查詢數據的java端操作,不是我不想在 我的視圖中修改,我先后試驗過decode、nvl、case甚至使用if then else 語句,都沒有把這個討厭的0去掉,沒有部分只好在java端進行for循環了,這樣效率也不怎么樣,白白多了2層循環,鑒于視圖寫的比較合理,這樣的速度客戶居然能接受。

          晚上睡覺就想,怎么才能把0去掉了,基本上把oracle的函數都想一遍了,甚至想自己寫的函數實現,后來想到replace函數,結果使用成功了。

         但是發現使用replace的效率好像沒有使用改造1的方案快?

        不知各位還有沒有別的方法處理0這個問題,歡迎大家討論一下。

    posted on 2008-07-11 16:12 冷面閻羅 閱讀(5470) 評論(8)  編輯  收藏 所屬分類: 數據庫

    評論

    # re: ORACLE數據統計0的處理  回復  更多評論   

    呵呵不是方法的方法,但能解決問題。vista的源碼中說不定也有這樣曲線救國的代碼呢
    :)
    2008-07-11 17:09 | hnwyf

    # 大梅沙云頂天海會所  回復  更多評論   

    大梅沙云頂天海會所
    2008-07-11 17:47 | 大梅沙云頂天海會所

    # re: ORACLE數據統計0的處理  回復  更多評論   

    --有兩個辦法,可以不用去改java程序,而在SQL里進行統一
    --一個是在使用sum的查詢外面再嵌套一層:
    select sum(1) as a from tbl_test t where t.id<100
    -->
    select (case when x.a is null then 0 end) as a from --在外層對NULL進行轉換
    (select sum(1) as a from tbl_test t where t.id<100) x

    --第二種辦法是直接在sum的參數里進行處理:
    select sum(1) as a from tbl_test t where t.id<100
    -->
    select sum(case when t.id<100 then 1 else 0 end) as a from tbl_test t
    --把統計條件放到sum的參數里,可以對NULL進行轉換
    2008-07-13 00:08 | masuz

    # re: ORACLE數據統計0的處理  回復  更多評論   

    @masuz
    sum函數如果求和的列沒有數據,即為null的時候,sum后的結果為null,
    但是count函數,統計的函數是從0開始的。
    2008-07-13 08:11 | 冷面閻羅

    # re: ORACLE數據統計0的處理  回復  更多評論   

    如果sum的列為NULL,那就判斷一下再sum,應該可以
    select sum(case when t.num is null then 0 else t.num end) as a from tbl_test t
    2008-07-13 14:36 | masuz

    # re: ORACLE數據統計0的處理[未登錄]  回復  更多評論   

    使用nvl
    2008-07-14 12:27 | Jarod

    # re: ORACLE數據統計0的處理[未登錄]  回復  更多評論   

    在項目實施過程中也遇到一個類似的問題。
    要統計數據,但是表中間一條數據都沒有,結果用SUM出來什么都沒有,客戶希望出來的是0.
    結果就先用count(*)判斷是不是有記錄,沒有直接返回0,有再進行SUM操作。SUM操作的時候將NULL的變成0,這樣進行統計,結果始出來的。不過用count函數,還必須有個GROUP BY的操作,變態啊……
    2008-07-14 12:36 | James

    # re: ORACLE數據統計0的處理[未登錄]  回復  更多評論   

    select nvl(sum(x),0) from xxx

    這樣就行了....
    2008-07-14 14:25 | yy
    主站蜘蛛池模板: v片免费在线观看| 国产亚洲福利精品一区二区| 亚洲?V乱码久久精品蜜桃 | 国产免费不卡视频| 中文字幕亚洲综合精品一区| 久久精品一本到99热免费| 午夜精品在线免费观看| 日本亚洲免费无线码| 成人激情免费视频| 亚洲国产精品网站在线播放| 国产一级一片免费播放i| 亚洲一二成人精品区| 24小时日本韩国高清免费| 免费一看一级毛片| 一级成人a免费视频| 亚洲精品天天影视综合网| 视频免费1区二区三区| 国产乱辈通伦影片在线播放亚洲| wwwxxx亚洲| 夜色阁亚洲一区二区三区| 三年片免费高清版 | 一区二区三区AV高清免费波多| 亚洲日韩国产一区二区三区| 在线观看亚洲AV每日更新无码| 免费观看a级毛片| 9久热这里只有精品免费| 亚洲精品在线视频观看| 青青青国产免费一夜七次郎| 精品国产福利尤物免费| 亚洲国产片在线观看| 国产一区在线观看免费| 久久久久国产精品免费免费不卡| 国产亚洲美日韩AV中文字幕无码成人| 99热在线日韩精品免费| 久久乐国产精品亚洲综合| 日韩免费视频一区二区| 亚洲AV无码AV吞精久久| 亚洲国产精品高清久久久| 午夜爱爱免费视频| 日本免费一区二区久久人人澡| 亚洲综合一区国产精品|