I would like to know if it would make any difference if I use UPPER function in WHERE clause as compared to using it in SELECT statement. For Example:
SELECT
2 AS ORDERID,
'OFFC' AS RESULTTYPE,
OFFC_CD AS GROUPCOL,
SUM(FACE_AMT) AS TOT_FACE_AMT,
SUM(PROJ_PREM_AMT) AS TOT_PROJ_PREM_AMT,
COUNT(*) AS TOT_NUM_CASES,
'YTD' AS RPTTYP
FROM
(
SELECT
FMI.ACCT_GRP_ID, FMI.GA_CD, FMI.OFFC_CD, FMI.GROUP_REALLOCATION, FMI.STAT_NAME
,CASE WHEN FMI.GROUP_REALLOCATION = 'Y' THEN
SUM(NVL(FMI.FACE_AMT,0)) OVER (PARTITION BY FMI.ACCT_GRP_ID, FMI.AGNT_NAME, FMI.STAT_NAME, FMI.GROUP_REALLOCATION, FMI.LOB_NAME ORDER BY FMI.CA_CS_NUM DESC)
ELSE
NVL(FMI.FACE_AMT,0)
END FACE_AMT
,CASE WHEN FMI.GROUP_REALLOCATION = 'Y' THEN
SUM(NVL(FMI.PROJ_PREM_AMT,0)) OVER (PARTITION BY FMI.ACCT_GRP_ID, FMI.AGNT_NAME, FMI.STAT_NAME, FMI.GROUP_REALLOCATION, FMI.LOB_NAME ORDER BY FMI.CA_CS_NUM DESC)
ELSE
NVL(FMI.PROJ_PREM_AMT,0)
END PROJ_PREM_AMT
,RANK() OVER (PARTITION BY FMI.ACCT_GRP_ID, FMI.AGNT_NAME, FMI.STAT_NAME, FMI.GROUP_REALLOCATION, FMI.LOB_NAME ORDER BY FMI.CA_CS_NUM) RANKING
FROM
IFV_FLD_MGMT_INFO FMI
JOIN IFT_BAT_PARM BP
ON FMI.LST_STAT_DT >= (TO_DATE('01/01/' || TO_CHAR(TO_DATE(BP.PARM_DAT_VAL, 'YYYYMMDD'), 'YYYY'), 'MM/DD/YYYY'))
AND BP.BAT_ID = 'CMISFLDMGMT_DT'
WHERE FMI.OFFC_CD IN (pOffcCd)
AND FMI.SHOWINFMR = 'Y'
)
WHERE ((GROUP_REALLOCATION = 'Y' AND RANKING = 1) OR (GROUP_REALLOCATION = 'N'))
AND UPPER(STAT_NAME) = 'PLACED'
GROUP BY OFFC_CD
In the above code, will it make difference if I move UPPER function from WHERE clause to SELECT statement in the inner query as UPPER(FMI.STAT_NAME) STAT_NAME? Will there be any performance gain in long run?
Edited by: Kuul13 on Jul 13, 2009 12:25 PM