「In」句を使用するクエリがあります。ここで、結果セットを In 句と同じ順序にしたいと考えています。例えば -
select Id,Name from mytable where id in (3,6,7,1)
結果セット:
|Id | Name |
------------
| 3 | ABS |
| 6 | NVK |
| 7 | USD |
| 1 | KSK |
一時テーブルを使用したくありません。1回のクエリで目標を達成することは可能ですか?
CTEも使用できます
with filterID as
(
3 ID, 1 as sequence
union
6, 2
union
7, 3
union
1, 4
)
select mytable.* from mytable
inner join filterID on filterID.ID = mytable.ID
order by filterID.sequence ;
T-SQL では、big を使用してこれを行うことができますcase
。
select Id, Name
from mytable
where id in (3, 6, 7, 1)
order by (case id when 3 then 1 when 6 then 2 when 7 then 3 else 4 end);
またはcharindex()
:
order by charindex(',' + cast(id as varchar(255)) + ',',
',3,6,7,1,')