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