我有一个带有“订阅”的表,当我按顺序对记录进行排序时,我得到了错误的结果。我的结果不按MyColumn排序
我的查询是:
Select Subscriptioncode from Subscription order by Subscriptioncode desc
我的结果如:
90
80
8
700
73
634
100
为什么要获得此结果?
在SubscriptionCode中,某些行为空。
100
答案 0 :(得分:13)
您的列SubscriptionCode
当前不是数字类型,而是可能是文本类型。但是,您可以CAST
将此列添加到INT
类型,然后排序应该没有问题:
Select Subscriptioncode from Subscription
order by CAST(Subscriptioncode AS INT) desc
答案 1 :(得分:3)
您应声明订阅代码列数据类型为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 Ex:Varchar
以外的数据类型时- > 它会将值排序为按字母顺序排序,即abc
你的结果是错误的。所以选择正确的数据类型。
答案 2 :(得分:0)
您可以使用以下命令以降序检索数据,在结束时或在开始时订单为Null(当您提到您的列名也包含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
它在结尾处将结果作为空值进行检索(对于开始时的空值,将1更改为0,将0更改为1)
如果您不想指定空位置,则可以使用
Select column-name from table-name order by cast(column-name as int)desc