我已经设置的数据应取出来,应该按以下顺序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