2012-11-12 19 views
3

這是我的表的示例風景。首先,我必須通過ITime asc來查找,但如果在ITime中有相同的記錄,那麼記錄順序將是「pass-> fail-> withdraw」。請檢查下面的臨時表。SQL:需要使用組或其他方式對值進行排序

if object_id('tempdb.dbo.#temp321','U') is not null 
drop table tempdb.dbo.#temp321 
create table #temp321(
id int, 
uname varchar(50), 
ITime datetime, 
Result varchar(10) 
) 
INSERT into #temp321 values('1','a','2012-11-12 13:12:28.103','pass') 
INSERT into #temp321 values('2','b','2012-11-12 13:12:28.103','fail') 
INSERT into #temp321 values('3','c','2012-11-12 12:58:30.000','pass') 
INSERT into #temp321 values('4','d','2012-11-12 13:12:28.103','withdrow') 
INSERT into #temp321 values('5','e','2012-11-12 12:58:41.360','withdraw') 
INSERT into #temp321 values('6','f','2012-11-12 13:12:28.103','pass') 
INSERT into #temp321 values('7','g','2012-11-12 13:12:28.103','fail') 
select ID from #temp321 ORDER BY ITime ASC 
drop table #temp321 


Expected outcomes ID value : 3,5,1,6,2,7,4 

我該怎麼做?提前致謝。

回答

5
ORDER BY ITIME ASC, 
     CASE Result WHEN 'pass' THEN 1 
        WHEN 'fail' THEN 2 
        WHEN 'withdraw' THEN 3 
        ELSE 4 
        END, 
     ID; 
+0

Demo [** here **](http://sqlfiddle.com/#!6/eca63/1/0)。 –

+1

非常感謝。它的工作是我想要的 – riad

相關問題