SQL使用大小写排序相等的值

ria*_*iad 0 sql sql-server

这里已经提出类似的问题.但目前的情况比以前有点复杂.在示例中,如果相同,Itime那么我们可以按案例排序,但如果Itime和结果相同,那么我该如何排序.

我的问题是,结果ID:3,5,6,1,2,7,8,4.为什么失败案例是2,7,8.

为什么不是8,2,7?

如果我想要预期的结果如:3,5,1,6,8,2,7,4我该怎么办?

请运行以下命令并帮我排序.提前致谢.

if object_id('tempdb.dbo.#temp321','U') is not null
   drop table tempdb.dbo.#temp321

create table #temp321(id int, uname varchar(50), current_point int, 
                      previous_point int, ITime datetime, Result varchar(10))

INSERT into #temp321 values('1','a','50','40','2012-11-12 13:12:28.103','pass')
INSERT into #temp321 values('2','b','15','10','2012-11-12 13:12:28.103','fail')
INSERT into #temp321 values('3','c','71','70','2012-11-12 12:58:30.000','pass')
INSERT into #temp321 values('4','d','34','30','2012-11-12 13:12:28.103','withdraw')
INSERT into #temp321 values('5','e','40','35','2012-11-12 12:58:41.360','withdraw')
INSERT into #temp321 values('6','f','65','60','2012-11-12 13:12:28.103','pass')
INSERT into #temp321 values('7','g','20','15','2012-11-12 13:12:28.103','fail')
INSERT into #temp321 values('8','h','10','7','2012-11-12 13:12:28.103','fail')


select 
    ID 
from 
    #temp321 
ORDER BY 
    ITime ASC,
    CASE Result 
       WHEN 'pass' THEN 1 
       WHEN 'fail' THEN 2 
       WHEN 'withdrow' THEN 3 
    END 

drop table #temp321 
Run Code Online (Sandbox Code Playgroud)
  • 当前输出ID:3,5,6,1,2,7,8,4
  • 预期产出ID:3,5,1,6,8,2,7,4

dog*_*ose 5

当前查询不会每次都提供相同的订单.

对我来说,你的例子是:

3, 5, 1, 6, 2, 7, 8, 4 (Note 1 and 6 being swapped)
Run Code Online (Sandbox Code Playgroud)

考虑到排序,与排序值相比,图1和图6中的"排序"是"相等的".如果没有指定排序(或相同的排序),那么该组中的顺序是 - 按定义 - 未定义.(取决于创建数据的顺序线程)

同样适用2, 7, 8.你想要订单3, 5, 1, 6, 8, 2, 7, 4- 所以你似乎"拥有"一个逻辑,你期望它如何排序?然后添加该条件,你就完成了:)

(对于您的预期输出,添加current_point是您想要的 - 但您必须知道是否要按该列排序)

SELECT * 
FROM temp321 
ORDER BY ITime ASC,
  CASE Result 
    WHEN 'pass'     THEN 1 
    WHEN 'fail'     THEN 2 
    WHEN 'withdraw' THEN 3 
  END, current_point ASC
Run Code Online (Sandbox Code Playgroud)