2016-07-05 52 views
1

我想通過排列他們在where子句中列出的順序來顯示我的MySQL查詢的結果。目前,結果未按列表中的數字順序列出。選擇結果並在列表項中排序

這裏是我的發言

SELECT * 
FROM subscription 
WHERE phone in 
(
    '255769016082', 
    '255742594724', 
    '255753299742', 
    '255759502732', 
    '255753839708' 
) 
+0

所以呢?您選擇的訂單通過聲明在哪裏?你想如何訂購?請添加一些信息。 –

+0

嗨馬克西姆,我沒有把訂單,因爲我不知道我的查詢正確的聲明。我怎麼試過(Column_Name)Desc或Asc,並且它是成功執行的。但我關心的是在sql語句中將結果排列在我的列表中。 – gngadada

回答

3

由於要通過多個值在非連續的順序排列,即它們不是數字,從而也不會被他們以正確排序爲VARCHAR ,您需要將數值應用於它們。這是你如何做到的。

if object_id('tempdb..#temp') is not null drop table #temp 

create table #temp (phone varchar(20)) 

insert into #temp (phone) values 
('255769016082'), 
('255742594724'), 
('255753299742'), 
('255759502732'), 
('255753839708'), 
('257538312333') 

SELECT * 
FROM #temp 
WHERE phone in 
(
    '255769016082', 
    '255742594724', 
    '255753299742', 
    '255759502732', 
    '255753839708' 
) 
ORDER BY 
CASE 
    WHEN phone = '255769016082' THEN 1 
    WHEN phone = '255742594724' THEN 2 
    WHEN phone = '255753299742' THEN 3 
    WHEN phone = '255759502732' THEN 4 
    WHEN phone = '255753839708' THEN 5 
END 

將來,如果您要對非數字字段進行排序,您需要熟悉SQL Server如何處理此操作。

考慮這個

if object_id('tempdb..#char') is not null drop table #char 

create table #char(stringField varchar(6)) 

insert into #char (stringField) values 
('a'), 
('A'), 
('b'), 
('B'), 
('AB'), 
('aB'), 
('ab'), 
('Ab'), 
('ba'), 
('Ba'), 
('bA'), 
('BA') 

select * from #char order by stringField asc 
select * from #char order by stringField desc 
相關問題