我已經設置的數據應取出來,應該按以下順序ORDER BY上PLSQL
Last Name First Name Location
Blake James 101007
fusio Wiko 101008
100 Total
FAROMOJU BANKOLE 303315
Gibbs Rhonda 303315
Greene Leette 303315
331 Total
......
............
在該準備一份報告,我們可以看到,3字母代碼 [從提取位置代碼 - CONCAT(SUBSTR(COLUMN3,3,3),'Total')]在所有位置設置後。我只是想出報告,除了地點代碼降序的情況外,它工作得很好。它使用'位置'進行排序後,將其轉換爲3個字母的代碼,而不是使用完整的數字代碼。所以在結果中降序不能很好地工作,因爲我需要。請給我一個解決方案,
我附上我的代碼,
******************************************************
FUNCTION GET_ACTY_SUMMARY(V_STARTDATE IN DATE,V_ENDDATE IN DATE)
RETURN TEMP_OUTPUT_TABLE PIPELINED IS
CURSOR ACTY_SUMMARY IS
/* The query fetches the report field grouped by First Name,Last Name
and Location.*/
SELECT
COLUMN1 AS LASTNAME,
COLUMN2 AS FIRSTNAME,
COLUMN3 AS LOCATION,
SUM(COLUMN4) AS ACTIVITYNM1,
SUM(COLUMN5) AS ACTIVITYNM2,
SUM(COLUMN6) AS ACTIVITYNM3,
SUM(COLUMN7) AS ACTIVITYNM4,
SUM(COLUMN8) AS ACTIVITYNM5,
SUM(COLUMN9) AS REG_HRS,
SUM(COLUMN10) AS OT_HRS,
SUM(COLUMN11) AS TOTAL_HRS,
SUM(COLUMN12) AS PRODUCTIVITY_PERCENTAGE
FROM
TABLE(ACTY_COLUMN(V_STARTDATE,V_ENDDATE))
GROUP BY
COLUMN1,
COLUMN2,
COLUMN3
UNION
SELECT NULL,
NULL,
CONCAT(SUBSTR(COLUMN3,3,3),'Total'),
SUM(COLUMN4) AS ACTIVITYNM1,
SUM(COLUMN5) AS ACTIVITYNM2,
SUM(COLUMN6) AS ACTIVITYNM3,
SUM(COLUMN7) AS ACTIVITYNM4,
SUM(COLUMN8) AS ACTIVITYNM5,
SUM(COLUMN9) AS REG_HRS,
SUM(COLUMN10) AS OT_HRS,
SUM(COLUMN11) AS TOTAL_HRS,
SUM(COLUMN12) AS PRODUCTIVITY_PERCENTAGE
FROM TABLE(ACTY_COLUMN(V_STARTDATE,V_ENDDATE))
GROUP BY COLUMN3
UNION
SELECT NULL,
NULL,
'Total',
SUM(COLUMN4) AS ACTIVITYNM1,
SUM(COLUMN5) AS ACTIVITYNM2,
SUM(COLUMN6) AS ACTIVITYNM3,
SUM(COLUMN7) AS ACTIVITYNM4,
SUM(COLUMN8) AS ACTIVITYNM5,
SUM(COLUMN9) AS REG_HRS,
SUM(COLUMN10) AS OT_HRS,
SUM(COLUMN11) AS TOTAL_HRS,
SUM(COLUMN12) AS PRODUCTIVITY_PERCENTAGE
FROM TABLE(ACTY_COLUMN(V_STARTDATE,V_ENDDATE))
ORDER BY 3 desc ;
GAS ACTY_SUMMARY%ROWTYPE;
/*Intialize the table output format with NULL.*/
TT TEMP_OUTPUT_FORMAT := INITIALIZE_TABLE_FORMAT();
BEGIN
OPEN ACTY_SUMMARY;
FETCH ACTY_SUMMARY INTO GAS;
WHILE ACTY_SUMMARY%FOUND LOOP
BEGIN
TT.COLUMN1 := GAS.LASTNAME;
TT.COLUMN2 := GAS.FIRSTNAME;
TT.COLUMN3 := GAS.LOCATION;
TT.COLUMN4 := GAS.ACTIVITYNM1;
TT.COLUMN5 := GAS.ACTIVITYNM2;
TT.COLUMN6 := GAS.ACTIVITYNM3;
TT.COLUMN7 := GAS.ACTIVITYNM4;
TT.COLUMN8 := GAS.ACTIVITYNM5;
TT.COLUMN9 := GAS.REG_HRS;
TT.COLUMN10 := GAS.OT_HRS;
TT.COLUMN11 := GAS.TOTAL_HRS;
TT.COLUMN12 := GAS.PRODUCTIVITY_PERCENTAGE;
PIPE ROW(TT);
END;
FETCH ACTY_SUMMARY INTO GAS;
END LOOP;
CLOSE ACTY_SUMMARY;
RETURN;
END GET_ACTY_SUMMARY;
END GEHC_ACTY_REPT_PKG;
******************************************************
感謝 阿南德
我會推薦使用'union all'而不是'union',除非有很好的理由,因爲'union'和'union all'是一樣的,後面是'select distinct' – 2010-11-19 14:32:42
@MikeyByCrikey - 優秀點。更新了我的回覆。 – 2010-11-19 15:27:11
謝謝鮑勃賈維斯..非常感謝..它的工作! – Anand 2010-11-22 11:35:59