I recently added an ad hoc column to a heavily used query with paging and sorting. To get the sorting to work on the new aliased column it was necessary to pull the "row_number() over" clause in to an outer query. I just wanted to document how this was done for future reference.
SELECT *
FROM (SELECT my_table.*,
ROW_NUMBER ()
OVER (
ORDER BY
UPPER (
DECODE (
pSortDir,
'asc', DECODE (pSortOrder,
'HasDemographicData', has_demographic_data
pc.legal_name))),
UPPER (
DECODE (
pSortDir,
'desc', DECODE (pSortOrder,
'HasDemographicData', has_demographic_data
pc.legal_name))) DESC)
rn
FROM (SELECT /*+ first_rows(20) */
pc.dot_number,
ca.carrier_operation,
pc.dba_name,
ca.phy_street,
pc.isp_annual_screenings,
CASE
WHEN (pc.discovered_psp_via IS NULL) THEN 'No'
ELSE 'Yes'
END
AS has_demographic_data
FROM psp_customer pc
LEFT OUTER JOIN carrier ca
ON pc.dot_number = TO_CHAR (ca.dot_number)
WHERE pDot_number IS NULL OR pc.dot_number LIKE '%' || pDot_number || '%')
WHERE rn BETWEEN vStartRow AND vEndRow
ORDER BY rn;
Comments
Post a Comment