<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
    主站蜘蛛池模板: 成人黄18免费视频| 99re热免费精品视频观看| 亚洲福利精品一区二区三区| 亚洲欧洲无码AV不卡在线| 永久免费av无码网站韩国毛片| 久久久久亚洲av无码专区喷水 | 国产性生大片免费观看性 | 国产成人免费a在线资源| 亚洲久热无码av中文字幕| 国产精品久久久久影院免费| 精品久久久久久亚洲综合网| 四虎影视在线永久免费观看| 色婷婷精品免费视频| 伊人亚洲综合青草青草久热| 中文日本免费高清| 亚洲天天在线日亚洲洲精| ww在线观视频免费观看| 亚洲精品第一综合99久久| 免费可以在线看A∨网站| 亚洲A∨精品一区二区三区下载| 国产男女猛烈无遮挡免费视频| 全部一级一级毛片免费看| 中文字幕不卡亚洲| 91精品啪在线观看国产线免费| 亚洲精品国产成人99久久| 成人女人A级毛片免费软件| 麻豆亚洲AV成人无码久久精品 | 国产成人亚洲综合色影视| 6080午夜一级毛片免费看| 亚洲中文无码卡通动漫野外| 免费日韩在线视频| 视频免费在线观看| 精品亚洲成在人线AV无码| 在线观看永久免费视频网站| 免费在线黄色电影| 亚洲成a人片在线看| 亚洲一区二区三区在线播放| 96免费精品视频在线观看| 亚洲精品又粗又大又爽A片| 亚洲精品无码高潮喷水在线| 国产成人免费爽爽爽视频|