这里已经提出了类似的问题.但目前的情况比以前有点复杂.在示例中,如果相同,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)
当前查询不会每次都提供相同的订单.
对我来说,你的例子是:
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)
| 归档时间: |
|
| 查看次数: |
933 次 |
| 最近记录: |