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

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

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

    Dict.CN 在線詞典, 英語學(xué)習(xí), 在線翻譯

    都市淘沙者

    荔枝FM Everyone can be host

    統(tǒng)計

    留言簿(23)

    積分與排名

    優(yōu)秀學(xué)習(xí)網(wǎng)站

    友情連接

    閱讀排行榜

    評論排行榜

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

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

           最簡單的方法如下:

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

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

    三:變態(tài)一點的:取前幾名,但值相同的記錄為同一名次
            比如:對班級學(xué)生成績進行排名,第一名:100,共2名,第二名,98,共5名........如此類推,取出排名前十名的所有學(xué)生。
            基本思路是:先使用Distinct取得成績的前十名,并使用rownum排序.這樣可以得出第十名的值,然后取所有成績大于等于第十名的所有學(xué)生信息。
            記錄得到后,然后再與剛使用Distinct取得成績?yōu)榍笆矣衦ownum序號的表Join,以成績?yōu)闂l件。就可以得到正常的排名次序。
             相關(guān)代碼請參考如下腳本:
    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/

    主站蜘蛛池模板: 亚洲Av无码一区二区二三区| eeuss草民免费| 四虎国产精品免费视| 中文字幕无码免费久久9一区9| 亚洲系列中文字幕| 日韩成全视频观看免费观看高清| A级毛片成人网站免费看| 亚洲一区免费在线观看| 亚洲精品一级无码鲁丝片| 91青青国产在线观看免费 | 免费人人潮人人爽一区二区| 亚洲中文字幕无码爆乳AV| 性生交片免费无码看人| a级毛片毛片免费观看久潮| 亚洲一区二区三区写真| 久久亚洲精品无码| 亚洲Av无码乱码在线znlu| 2022久久国产精品免费热麻豆| 男男gvh肉在线观看免费| 亚洲综合男人的天堂色婷婷| 亚洲片国产一区一级在线观看| 在线看片免费不卡人成视频| 国产人成网在线播放VA免费| 亚洲精品无码专区在线| 亚洲视频精品在线| 亚洲精品高清国产一线久久| 在线永久免费观看黄网站| 4455永久在线观免费看| a级毛片无码免费真人久久| 国产亚洲精品第一综合| 亚洲色大18成人网站WWW在线播放| 亚洲尹人九九大色香蕉网站| 亚洲综合国产精品第一页| 免费国产精品视频| 午夜神器成在线人成在线人免费| 最近2019免费中文字幕6| 青青操免费在线观看| 日韩毛片免费一二三| 亚洲Aⅴ在线无码播放毛片一线天| 亚洲中文久久精品无码1 | 亚洲成AV人片在线播放无码|