Ordering returned rows according to a list

Started by Sebastian Tennantover 17 years ago3 messagesgeneral
Jump to latest
#1Sebastian Tennant
sebyte@smolny.plus.com

Hi all,

I'd like to make a single query that returns a number of rows using a
'WHERE id IN (<list-of-ids>)' condition, but I'd like the rows to be
returned in the order in which the ids are given in the list.

Is this possible?

Sebastian

#2Adam Rich
adam.r@sbcglobal.net
In reply to: Sebastian Tennant (#1)
Re: Ordering returned rows according to a list

Hi all,

I'd like to make a single query that returns a number of rows using a
'WHERE id IN (<list-of-ids>)' condition, but I'd like the rows to be
returned in the order in which the ids are given in the list.

Is this possible?

Depending on how many IDs you have in your list, you can accomplish this
with a CASE statement:

SELECT *
FROM MYTABLE
WHERE id IN (6, 9, 3)
ORDER BY CASE id
WHEN 6 then 1
WHEN 9 then 2
WHEN 3 then 3 END

#3Sebastian Tennant
sebyte@smolny.plus.com
In reply to: Sebastian Tennant (#1)
Re: Ordering returned rows according to a list

Quoth "Adam Rich" <adam.r@sbcglobal.net>:

I'd like to make a single query that returns a number of rows using a
'WHERE id IN (<list-of-ids>)' condition, but I'd like the rows to be
returned in the order in which the ids are given in the list.

Depending on how many IDs you have in your list, you can accomplish this
with a CASE statement:

SELECT *
FROM MYTABLE
WHERE id IN (6, 9, 3)
ORDER BY CASE id
WHEN 6 then 1
WHEN 9 then 2
WHEN 3 then 3 END

Thanks for this suggestion Adam.

You say "depending on how many IDs there are in the list". The query is
constructed programatically so unless there's a limit on the number of
conditions a CASE clause can handle, this is the way I'll go about it.

Sebastian