Thread: An order by question
All, 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. Any suggestions?
> 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/
Dnia 2004-02-01 14:34, Użytkownik Michael Fuhr napisał: > 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; or the easier one: order by lastname,firstname, translate(term,'SXF','123'); Regards, Tomasz Myrta
On Sun, Feb 01, 2004 at 06:22:30PM +0100, Tomasz Myrta wrote: > Dnia 2004-02-01 14:34, U¿ytkownik Michael Fuhr napisa³: > > 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; > > or the easier one: > > order by lastname,firstname, translate(term,'SXF','123'); Blast...I just *knew* I was missing an easy, obvious solution. -- Michael Fuhr http://www.fuhr.org/~mfuhr/