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

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

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

    Dict.CN 在線詞典, 英語學習, 在線翻譯

    都市淘沙者

    荔枝FM Everyone can be host

    統計

    留言簿(23)

    積分與排名

    優秀學習網站

    友情連接

    閱讀排行榜

    評論排行榜

    Oracle中取前幾名的方法(轉)

    與SQL SERVER相比,Oracle沒有Top n 這樣簡單方便取前幾名的方法.
           但也有相對應的方法可以實現,使用的是Oracle中的偽列:rownum.

           最簡單的方法如下:

    一:最簡單的問題:直接取前幾名
            SELECT A.* from Company_Expense  A WHERE ROWNUM<=N 
             (注意,在上句中我們沒有指定按哪列進行排序,而具體rownum序號是依據哪一列,現在我都不確定。但可以明確一點的是,如果我們按主鍵進行排序,rownum號不會亂,但如果指定其它列的號,序號有可能會亂)       

    二:麻煩一點的:取后幾名
            上面方法的一點變通,首先在內部以某列進行排列,在外面取
            select V.* from
    (
    select rownum,A.* from company_expense A
    order by a.expenseid desc
    )V where rownum<3

    三:變態一點的:取前幾名,但值相同的記錄為同一名次
            比如:對班級學生成績進行排名,第一名:100,共2名,第二名,98,共5名........如此類推,取出排名前十名的所有學生。
            基本思路是:先使用Distinct取得成績的前十名,并使用rownum排序.這樣可以得出第十名的值,然后取所有成績大于等于第十名的所有學生信息。
            記錄得到后,然后再與剛使用Distinct取得成績為前十名,且有rownum序號的表Join,以成績為條件。就可以得到正常的排名次序。
             相關代碼請參考如下腳本:
    select rownum, T.Row_Num, v.*
      from (select A.Name,
                   A.Employee_Code,
                   v.STATUS,
                   To_Char(v.JOIN_DATE, 'yyyy-mm-dd') Join_Date,
                   V.Unit_Name,
                   p.line_description Line_Num,
                   sum(a.last_result) Sum_result
              from QM_QUALITY_LEVEL_JUDGE   A,
                   hr_lbr_employee_tl_tbl_v v,
                   Qm_Product_Line          P
             Where a.employee_code = v.EMPLOYEE_CODE
               And A.LINE_NUM = P.Line_Num
               And To_Char(A.Index_Date, 'yyyy-mm-dd') >= '2006-05-01'
               And To_Char(A.Index_Date, 'yyyy-mm-dd') <= '2006-07-24'
               And A.Last_Result > 0
             group by A.Name,
                      A.Employee_Code,
                      V.STATUS,
                      V.JOIN_DATE,
                      V.Unit_Name,
                      A.Line_Num,
                      P.LINE_DESCRIPTION
             order by Sum_Result desc, employee_code desc) v   ---基本的信息
      left join (select rownum row_Num, v.*
                   from (select distinct sum(a.last_result) Sum_result
                           from QM_QUALITY_LEVEL_JUDGE   A,
                                hr_lbr_employee_tl_tbl_v v,
                                Qm_Product_Line          P
                          Where a.employee_code = v.EMPLOYEE_CODE
                            And A.LINE_NUM = P.Line_Num
                            And To_Char(A.Index_Date, 'yyyy-mm-dd') >=
                                '2006-05-01'
                            And To_Char(A.Index_Date, 'yyyy-mm-dd') <=
                                '2006-07-24'
                            And A.Last_Result > 0
                          group by A.Name,
                                   A.Employee_Code,
                                   V.STATUS,
                                   V.JOIN_DATE,
                                   V.Unit_Name,
                                   A.Line_Num,
                                   P.LINE_DESCRIPTION
                          Order by Sum_Result Desc) v
                  Where rownum <= 10) T On v.Sum_Result = T.Sum_Result  --得到正確的排名序號
                  
    -----以下條件是取得所有大于第十名成績的記錄              
     where V.sum_Result >=
           (select min(Sum_Result) Sum_Result
              from (select rownum row_Num, v.*
                      from (select distinct sum(a.last_result) Sum_result
                              from QM_QUALITY_LEVEL_JUDGE   A,
                                   hr_lbr_employee_tl_tbl_v v,
                                   Qm_Product_Line          P
                             Where a.employee_code = v.EMPLOYEE_CODE
                               And A.LINE_NUM = P.Line_Num
                               And To_Char(A.Index_Date, 'yyyy-mm-dd') >=
                                   '2006-05-01'
                               And To_Char(A.Index_Date, 'yyyy-mm-dd') <=
                                   '2006-07-24'
                               And A.Last_Result > 0
                             group by A.Name,
                                      A.Employee_Code,
                                      V.STATUS,
                                      V.JOIN_DATE,
                                      V.Unit_Name,
                                      A.Line_Num,
                                      P.LINE_DESCRIPTION
                             Order By Sum_Result Desc) v
                     Where rownum <= 10))


    posted on 2007-10-16 16:28 都市淘沙者 閱讀(2871) 評論(0)  編輯  收藏 所屬分類: Oracle/Mysql/Postgres/

    主站蜘蛛池模板: 国产精品亚洲片在线va| 亚洲AV香蕉一区区二区三区| 精品无码无人网站免费视频| 国产精品亚洲综合五月天| 成年女人免费碰碰视频| 77777亚洲午夜久久多人| 国产国产人免费视频成69堂| 亚洲另类自拍丝袜第1页| 亚洲国产av无码精品| 久久高潮一级毛片免费| 久久夜色精品国产噜噜噜亚洲AV | 最近免费视频中文字幕大全| 免费人成无码大片在线观看| 一级一片免费视频播放| 久久精品国产亚洲夜色AV网站| 69国产精品视频免费| 一级毛片aa高清免费观看| 亚洲黄网在线观看| 亚洲精品国产精品乱码不卡| 无码国产精品一区二区免费16 | 免费永久国产在线视频| 97国免费在线视频| 亚洲精品无码久久久久YW| 亚洲一区二区女搞男| 91免费国产精品| 中文字幕在线观看免费| 亚洲高清一区二区三区| 亚洲AV午夜成人影院老师机影院| 免费看国产精品3a黄的视频| 国产福利电影一区二区三区,免费久久久久久久精 | 国产一级理论免费版| 91福利免费网站在线观看| 亚洲人成7777影视在线观看| 亚洲午夜精品一级在线播放放| 182tv免费观看在线视频| 大片免费观看92在线视频线视频| 337p欧洲亚洲大胆艺术| 国产精品免费看久久久无码| 毛片无码免费无码播放| 老司机免费午夜精品视频| 亚洲理论精品午夜电影|