日期:2014-05-17  浏览次数:20629 次

SQL两次排序。
select EVT.* ,DEV.DNM, DEV.AI  from DEV inner join EVT 
ON EVT.DI =DEV.DI where EVT.TM >'2013-7-2 9:27:58' 
order by TM desc,case when EVT.DK ='false' then 1 else 0 end desc


表里有两个字段, 一个是TM(DATE),另一个是DK(bool )


首先按时间  降序。
然后 DK为false 的要排在前面。

------解决方案--------------------
select EVT.* ,DEV.DNM, DEV.AI  from DEV inner join EVT 
ON EVT.DI =DEV.DI where EVT.TM >'2013-7-2 9:27:58' 
order by TM desc,evt.dk
------解决方案--------------------

--> 测试数据:@T
declare @T table([TM] datetime,[DK] bit)
insert @T
select '2013-02-01',0 union all
select '2013-01-29',1 union all
select '2013-07-12',0 union all
select '2013-02-04',1 union all
select '2013-02-01',1

select * from @T ORDER BY [TM] DESC,[DK] 
--利用 RecordSet 将 bit 字段中的数据取出来后,它是 boolean 类型0(false)或1(true).
/*
TM                      DK
----------------------- -----
2013-07-12 00:00:00.000 0
2013-02-04 00:00:00.000 1
2013-02-01 00:00:00.000 0
2013-02-01 00:00:00.000 1
2013-01-29 00:00:00.000 1
*/