From: | Michael Fuhr <mike(at)fuhr(dot)org> |
---|---|
To: | darnold(at)northcoast(dot)com |
Cc: | pgsql-sql(at)postgresql(dot)org |
Subject: | Re: An order by question |
Date: | 2004-02-01 13:34:51 |
Message-ID: | 20040201133451.GA13002@winnie.fuhr.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-sql |
> I need a little help on a sorting problem. Imagine a table, call it
> records, that has fields:
>
> lastName
> firstName
> term
>
> I want to sort the records by last name, then first name, and finally by
> term. This almost does what I want:
>
> select * from records order by lastName, firstName, term;
>
> However, the possible values for term are:
>
> 2002F
> 2003S
> 2003X
> 2003F
>
> Where F is for fall, S for spring, and X for summer session. Thus, a
> straight alphabetical sort doesn't give me what I want. If the year is the
> same, then I want a sort with S, then X, then F for identical year.
Consider storing the session in a separate field and assigning each
session a value that collates in the order you want.
Here's a way to order the sessions using their current format:
SELECT *
FROM records
ORDER BY lastName,
firstName,
SUBSTRING(term FROM 1 FOR 4),
CASE SUBSTRING(term FROM 5)
WHEN 'S' THEN 1
WHEN 'X' THEN 2
ELSE 3
END;
--
Michael Fuhr
http://www.fuhr.org/~mfuhr/
From | Date | Subject | |
---|---|---|---|
Next Message | Tomasz Myrta | 2004-02-01 17:22:30 | Re: An order by question |
Previous Message | Stephan Szabo | 2004-02-01 05:48:12 | Re: Sometimes referential integrity seems not to work |