2015-05-11 64 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