6

データベースにクエリを実行して、次の方法でデータを取得しています

id が (6,33,1,78,2) の table1 から a,b,...f を選択

クエリから得た結果は、1,2,6,33,78 の順です。

結果を同じ順序 (6,33,1,78,2) にしたい。同じ順序でデータを取得する方法はありますか。

編集 * SQL 2008 を使用しています*

4

5 に答える 5

9

この 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')
于 2012-04-20T11:35:35.983 に答える
3

テーブル値コンストラクターの使用:

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 
于 2012-04-20T11:54:55.430 に答える
2

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,')
于 2012-04-20T11:44:04.100 に答える
2

背景はわかりませんが、通常、追加の orderIndex 列でこのカスタム オーダーを実現します。このようにして、テーブルに挿入するときに手動で順序を管理し、この列をデフォルト クエリの ORDER BY 句に追加できます。

于 2012-04-20T11:39:36.573 に答える
1

醜い解決策:

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 ...

この新しい列で並べ替えます

于 2012-04-20T11:39:07.597 に答える