2015-05-11 115 views
4

我有一個表'訂閱',當我排序順序記錄我得到錯誤的結果。我的結果不排序,由MyColumn排序錯誤記錄

我的查詢是:

Select Subscriptioncode from Subscription order by Subscriptioncode desc 

我喜歡的結果爲:

90 
80 
8 
700 
73 
634 
100 

爲什麼得到這樣的結果?

在SubscriptionCode某行爲空。

+4

什麼是SubscriptionCode的數據類型? –

+5

你在排序字符串,而不是數字。 –

回答

12

你列SubscriptionCode目前是不是一個數字類型,它可能是一個文本類型,而不是。但是,您可以CAST此列到INT類型,然後順序應該沒有問題的工作:

Select Subscriptioncode from Subscription 
order by CAST(Subscriptioncode AS INT) desc 
3

你應該申報Subscriptioncode數據類型爲INT

create table Subscription(
Subscriptioncode int) 

insert into Subscription values('90') 
insert into Subscription values('80') 
insert into Subscription values('8') 
insert into Subscription values('700') 
insert into Subscription values('73') 
insert into Subscription values('634') 
insert into Subscription values('100') 


Select Subscriptioncode from Subscription order by Subscriptioncode desc 

輸出:

Subscriptioncode 
700 
634 
100 
90 
80 
73 
8 

注:

當你正在申報比INT防爆其他數據類型:的Varchar

- >它會像排序字母順序 IE)值進行排序ABC

這就是你正在得到錯誤的結果。所以選擇正確的數據類型。

0

您可以使用以下與在年底或啓動順序空值遞減順序檢索數據(你提到你的列名包含Null也)

select column-name from table-name order by case when column-name is null then 1 else 0 end,cast(column-name as int)desc 

它retrive結果爲空在結束(空值在開始改變以1比0和0比1)

如果你不想指定空位置,然後你可以使用

Select column-name from table-name order by cast(column-name as int)desc