<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/

    主站蜘蛛池模板: 日本高清免费不卡在线| 蜜臀AV免费一区二区三区| 最好免费观看韩国+日本 | 免费毛片在线播放| 中文字幕亚洲精品无码| 免费av欧美国产在钱| 亚洲中文字幕无码av永久| 最新仑乱免费视频| 亚洲成a人片在线不卡一二三区 | 久久国产精品亚洲一区二区| 西西人体免费视频| 亚洲第一福利网站| 19禁啪啪无遮挡免费网站| 亚洲综合丁香婷婷六月香| 暖暖免费高清日本中文| 一级毛片大全免费播放| 亚洲欧洲无码AV电影在线观看| 两个人看的www免费| 亚洲自偷自拍另类图片二区| 亚洲免费综合色在线视频| 精品国产日韩亚洲一区91| 久久亚洲中文字幕精品一区四 | 亚洲综合一区国产精品| 四虎影视永久免费观看网址| yellow视频免费在线观看| 亚洲狠狠久久综合一区77777| 无码精品A∨在线观看免费| 在线观看亚洲视频| 亚洲男人都懂得羞羞网站| 成年人网站在线免费观看| 一本久久A久久免费精品不卡| 亚洲一区二区影院| 免费鲁丝片一级观看| 成人无码WWW免费视频| 亚洲香蕉久久一区二区 | 全黄性性激高免费视频| 国产情侣久久久久aⅴ免费| 在线综合亚洲中文精品| 亚洲中文字幕视频国产| 中文字幕无码播放免费| ww在线观视频免费观看w|