我正在进行类似
的查询SELECT id,name FROM table WHERE id IN (2,1,4,3)
我想
id name
2 B
1 A
4 D
3 C
但我正在
1 A
2 B
3 C
4 D
有没有办法按照与IN之后的列表相同的方式对查询结果进行排序?
相信我,我有一个实际的理由,我需要它;)
答案 0 :(得分:0)
SELECT id,name FROM table WHERE id IN (2,1,4,3)
ORDER BY CASE id
WHEN 2 THEN 1
WHEN 1 THEN 2
WHEN 4 THEN 3
WHEN 3 THEN 4
ELSE 5
END
这可能会解决您的问题。
解决方案2,将列表插入临时表并为其运行序列
id, seq(+1 every new row added)
-----------------
2 1
1 2
4 3
3 4
然后将2个表连接在一起并按此顺序排序。
答案 1 :(得分:0)
好的,我自己做了。它有点疯狂,但它有效;)
DECLARE @IDs varchar(max)
DECLARE @nr int
DECLARE @znak varchar(1)
DECLARE @index int
DECLARE @ID varchar(max)
SET @IDs='7002,7001,7004,7003'
SET @nr=1
SET @index=1
IF OBJECT_ID('tempdb..#temp') IS NOT NULL DROP TABLE #temp
CREATE TABLE #temp (nr int, id int)
--fill temp table with Ids
WHILE @index<=LEN(@Ids)
BEGIN
set @znak=''
set @ID=''
WHILE @znak<>',' AND @index<=LEN(@Ids)
BEGIN
SET @znak= SUBSTRING(@IDs,@index,1)
IF @znak<>',' SET @ID=@ID+@znak
SET @index=@index+1
END
INSERT INTO #temp(nr,id) VALUES (@nr,CAST(@ID as int))
SET @nr=@nr+1
END
-- select proper data in wanted order
SELECT MyTable.* FROM MyTable
INNER JOIN #temp ON MyTable.id=#temp.id
ORDER BY #temp.nr