按错误记录排序

时间:2015-05-11 05:04:19

标签: sql sql-server tsql

我有一个带有“订阅”的表,当我按顺序对记录进行排序时,我得到了错误的结果。我的结果不按MyColumn排序

我的查询是:

Select Subscriptioncode from Subscription order by Subscriptioncode desc

我的结果如:

90
80
8
700
73
634
100

为什么要获得此结果?

  

在SubscriptionCode中,某些行为空。

100

3 个答案:

答案 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