Skip to main content

Oracle: sorting by an aliased column

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

Popular posts from this blog

Sorting an ICollection

Have you ever wanted to sort an ICollection? It took me awhile to figure this one out so I thought I should blog it. I originally posted this quite awhile ago. Since then I have discovered a much easier way to sort a collection. Here's an update on sorting collections using LINQ. Much simpler: var orderedList = customer.Users .OrderBy(x => x.UserType) .ToList(); And here is my original post on the subject. You decide which one looks easier. private IList<EventReqFormSection> GetSections() { ICollection<EventReqFormSection> sections = EventReqFormSection.GetByEventReqFormId(_businessObject.Id, ObjectManager); // sort by Display Sequence List<EventReqFormSection> sortedValues = new List<EventReqFormSection>(sections); sortedValues.Sort(new EventReqFormSection.DisplaySequenceSort()); return sortedValues; } The above function retrieves an ICollection puts it into a List object and calls the sort method usin...
This blog is complete rubbish. Who knew the blogger release was going to fubar my blog so badly? Sigh... Well. I did kind of ignore this for about the last 4 years so it's my fault. I don't know if I have the energy to try repair my previous posts, or if I should just delete them all and start fresh?

Viewing the contents of an Oracle cursor in Toad

Prefix your cursor variable with a colon ":" begin event_api.get_activity_data(1, null,'2013', null, null, null,:pResultSet); end; Toad will prompt you for the type. Select CURSOR And voila! You will have the cursor dumped into a data grid within Toad!