rownum問題 |
尚未結案
|
asou982002
一般會員 發表:14 回覆:15 積分:5 註冊:2003-06-22 發送簡訊給我 |
|
Fishman
尊榮會員 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
|
asou982002
一般會員 發表:14 回覆:15 積分:5 註冊:2003-06-22 發送簡訊給我 |
|
Fishman
尊榮會員 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
Hi:
N : 粉紅色 COLUMN : 紅色 遞增(前面 N 筆): SELECT ROWNUM, S.SITE_USE_ID, S.SITE_USE_CODE, S.LOCATION FROM AR.RA_SITE_USES_ALL S, DUAL D WHERE S.LOCATION = D.DUMMY( ) AND ROWNUM <= 20 SELECT ROWNUM, A.SITE_USE_ID, A.SITE_USE_CODE, A.LOCATION FROM AR.RA_SITE_USES_ALL A WHERE 10 > (SELECT COUNT(*) FROM AR.RA_SITE_USES_ALL B WHERE B.LOCATION < A.LOCATION) ORDER BY A.LOCATION 遞減(後面 N 筆): 若欲排序之欄位為數字,可以用先前遞增方法加以修改如下: SELECT ROWNUM, S.SITE_USE_ID, S.SITE_USE_CODE, S.LOCATION FROM AR.RA_SITE_USES_ALL S, DUAL D WHERE TO_CHAR(9999999999 - S.SITE_USE_ID,'FM0000000000.0000000000') = D.DUMMY( ) AND ROWNUM <= 20 SELECT ROWNUM, A.SITE_USE_ID, A.SITE_USE_CODE, A.LOCATION FROM AR.RA_SITE_USES_ALL A WHERE 10 > (SELECT COUNT(*) FROM AR.RA_SITE_USES_ALL B WHERE B.LOCATION > A.LOCATION) ORDER BY A.LOCATION PS: 1.範例中階使用實體 Table,應用時可以用 SubQuery 代替使用 2.Method 2 中,請注意 <> 的方向 3.要在 SQL 的 SUBSELECT/SUBQUERY or VIEW 中直接使用 Order By 指令,必須將 DataBase 升級至 8.1.5.X 以後之版本(From Oracle Metalink) 4.要在 PL/SQL 的 SUBSELECT/SUBQUERY or VIEW 中直接使用 Order By 指令,必須將 DataBase 升級至 8.1.6.X 以後之版本(From Oracle Metalink)以上 SQL 經測試可在 Oracle 8.0.5.1.0 上正常執行,至於 7.3 不確定是否能用,你可以先試試看,另外 SQL 方面須加以調整方可達到你所要的功能 -------------------------------- 小弟才疏學淺,若有謬誤請不吝指教 --------------------------------
------
Fishman |
asou982002
一般會員 發表:14 回覆:15 積分:5 註冊:2003-06-22 發送簡訊給我 |
你好:
不好意思喔 我實在是才疏學淺,不太了解耶,可以請你再解釋一下嗎?
謝謝囉.....
引言: Hi:N : 粉紅色 COLUMN : 紅色 遞增(前面 N 筆): SELECT ROWNUM, S.SITE_USE_ID, S.SITE_USE_CODE, S.LOCATION FROM AR.RA_SITE_USES_ALL S, DUAL D WHERE S.LOCATION = D.DUMMY( ) AND ROWNUM <= 20 SELECT ROWNUM, A.SITE_USE_ID, A.SITE_USE_CODE, A.LOCATION FROM AR.RA_SITE_USES_ALL A WHERE 10 > (SELECT COUNT(*) FROM AR.RA_SITE_USES_ALL B WHERE B.LOCATION < A.LOCATION) ORDER BY A.LOCATION 遞減(後面 N 筆): 若欲排序之欄位為數字,可以用先前遞增方法加以修改如下: SELECT ROWNUM, S.SITE_USE_ID, S.SITE_USE_CODE, S.LOCATION FROM AR.RA_SITE_USES_ALL S, DUAL D WHERE TO_CHAR(9999999999 - S.SITE_USE_ID,'FM0000000000.0000000000') = D.DUMMY( ) AND ROWNUM <= 20 SELECT ROWNUM, A.SITE_USE_ID, A.SITE_USE_CODE, A.LOCATION FROM AR.RA_SITE_USES_ALL A WHERE 10 > (SELECT COUNT(*) FROM AR.RA_SITE_USES_ALL B WHERE B.LOCATION > A.LOCATION) ORDER BY A.LOCATION PS: 1.範例中階使用實體 Table,應用時可以用 SubQuery 代替使用 2.Method 2 中,請注意 <> 的方向 3.要在 SQL 的 SUBSELECT/SUBQUERY or VIEW 中直接使用 Order By 指令,必須將 DataBase 升級至 8.1.5.X 以後之版本(From Oracle Metalink) 4.要在 PL/SQL 的 SUBSELECT/SUBQUERY or VIEW 中直接使用 Order By 指令,必須將 DataBase 升級至 8.1.6.X 以後之版本(From Oracle Metalink)以上 SQL 經測試可在 Oracle 8.0.5.1.0 上正常執行,至於 7.3 不確定是否能用,你可以先試試看,另外 SQL 方面須加以調整方可達到你所要的功能 -------------------------------- 小弟才疏學淺,若有謬誤請不吝指教 -------------------------------- >>< face="Verdana, Arial, Helvetica"> |
Fishman
尊榮會員 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
Hi: 你先試試以下的 Query,我建了一個 Table Test1,在 Oracle 8.0.5.0.0 測試正常,若沒問題再解釋給你聽
SELECT T.PROD_NO, T.ERROR_NAME, SUM(T.QTY) FROM TEST1 T WHERE (T.PROD_NO,T.ERROR_NAME) IN (SELECT T1.PROD_NO, T1.ERROR_NAME FROM (SELECT PROD_NO, ERROR_NAME, SUM(QTY) QTY FROM TEST1 GROUP BY PROD_NO, ERROR_NAME) T1, SYS.DUAL D WHERE T1.PROD_NO = T.PROD_NO AND TO_CHAR(9999999999 - T1.QTY,'FM0000000000.0000000000') = D.DUMMY( ) AND ROWNUM <= 3) GROUP BY T.PROD_NO, T.ERROR_NAME ORDER BY T.PROD_NO, SUM(T.QTY) DESC-------------------------------- 小弟才疏學淺,若有謬誤請不吝指教 --------------------------------
------
Fishman |
asou982002
一般會員 發表:14 回覆:15 積分:5 註冊:2003-06-22 發送簡訊給我 |
|
Fishman
尊榮會員 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
Hi: 1.在 Table 內,建一個以 Prod_NO、Error_Name 組合之 Index,應可稍微改善 Performance 問題 2.
..... (SELECT T1.PROD_NO, T1.ERROR_NAME FROM (SELECT PROD_NO, ERROR_NAME, SUM(QTY) QTY FROM TEST1 GROUP BY PROD_NO, ERROR_NAME) T1, SYS.DUAL D WHERE T1.PROD_NO = T.PROD_NO AND TO_CHAR(9999999999 - T1.QTY,'FM0000000000.0000000000') = D.DUMMY( ) AND ROWNUM <= 3) .....只要功能就在於取得每一個 Prod_NO 數量加總前三名之Error_Name(以數量來比較) -------------------------------- 小弟才疏學淺,若有謬誤請不吝指教 --------------------------------
------
Fishman |
asou982002
一般會員 發表:14 回覆:15 積分:5 註冊:2003-06-22 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |