A very basic SQL question I am forgetting.
Given
select * from customers where customer_id in ('29383', '49405', '47483', '10209','46383', '93838');
…how can I order the results, such that it orders them in the same order as the in('...
clause?
for example, rather than order by customer_id desc;
I want the results to be:
29383 49405 47483 10209 46383 93838
Advertisement
Answer
On SQL Server, you may order using a CASE
expression:
SELECT * FROM customers WHERE customer_id in ('29383', '49405', '47483', '10209','46383', '93838') ORDER BY CASE customer_id WHEN '29383' THEN 1 WHEN '49405' THEN 2 WHEN '47483' THEN 3 WHEN '10209' THEN 4 WHEN '46383' THEN 5 WHEN '93838' THEN 6 END;
Note that if you have a persistent need for this ordering, it might make more sense to keep this customer_id
values and their mappings/orderings in a separate table. Then, join to this table and use the ordering value in your ORDER BY
clause.