データベースにクエリを実行して、次の方法でデータを取得しています
id が (6,33,1,78,2) の table1 から a,b,...f を選択
クエリから得た結果は、1,2,6,33,78 の順です。
結果を同じ順序 (6,33,1,78,2) にしたい。同じ順序でデータを取得する方法はありますか。
編集 * SQL 2008 を使用しています*
データベースにクエリを実行して、次の方法でデータを取得しています
id が (6,33,1,78,2) の table1 から a,b,...f を選択
クエリから得た結果は、1,2,6,33,78 の順です。
結果を同じ順序 (6,33,1,78,2) にしたい。同じ順序でデータを取得する方法はありますか。
編集 * SQL 2008 を使用しています*
この order by 句を追加します
order by case
when id = 6 then 1
when id = 33 then 2
when id = 1 then 3
when id = 78 then 4
when id = 2 then 5
end
MySQLを使用している場合、これを行うことができます
ORDER BY FIND_IN_SET(id, '6,33,1,78,2')
テーブル値コンストラクターの使用:
SELECT a, b, ... f
FROM
table1
JOIN
( VALUES
(1, 6),
(2, 33),
(3, 1),
(4, 78),
(5, 2)
) AS ordering (position, id)
ON ordering.id = table1.id
ORDER BY position
SQL Server を使用する場合は、charindex
.
select A, B
from Table1
where ID in (6,33,1,78,2)
order by charindex(','+cast(ID as varchar(10))+',', ',6,33,1,78,2,')
背景はわかりませんが、通常、追加の orderIndex 列でこのカスタム オーダーを実現します。このようにして、テーブルに挿入するときに手動で順序を管理し、この列をデフォルト クエリの ORDER BY 句に追加できます。
醜い解決策:
select a,b,...f from table1 where id in 6
UNION
select a,b,...f from table1 where id in 33
and so on..
「より良い」解決策:クエリに別の列を追加し、ケース6の次に0、ケース33の次に1などを実行します
select a,b,...f , case id when 6 then 0 when 33 then 1 <and so on> end
from table1 where ...
この新しい列で並べ替えます