发布日期 有效日期 状态
2009-4-1 2009-10-1 有效
2009-3-1 2009-3-5 无效
2009-2-28 2009-5-1 有效
2009-2-20 2009-10-1 有效
2009-2-18 2009-2-20 无效处理成这样:发布日期 有效日期 状态2009-4-1 2009-10-1 有效
2009-2-28 2009-5-1 有效
2009-2-20 2009-10-1 有效2009-3-1 2009-3-5 无效
2009-2-18 2009-2-20 无效条件:按发布日期排序,但先排有效记录,再排无效记录。
2009-4-1 2009-10-1 有效
2009-3-1 2009-3-5 无效
2009-2-28 2009-5-1 有效
2009-2-20 2009-10-1 有效
2009-2-18 2009-2-20 无效处理成这样:发布日期 有效日期 状态2009-4-1 2009-10-1 有效
2009-2-28 2009-5-1 有效
2009-2-20 2009-10-1 有效2009-3-1 2009-3-5 无效
2009-2-18 2009-2-20 无效条件:按发布日期排序,但先排有效记录,再排无效记录。
Drop table tb
create table tb([发布日期] datetime,[有效日期] datetime,[状态] varchar(10))
insert tb select '2009-4-1','2009-10-1','有效'
insert tb select '2009-3-1','2009-3-5','无效'
insert tb select '2009-2-28','2009-5-1','有效'
insert tb select '2009-2-20','2009-10-1','有效'
insert tb select '2009-2-18','2009-2-20','无效'
go
select * from tb order by case when 状态 ='有效' then 0 else 1 end,发布日期 desc
/*
发布日期 有效日期 状态
----------------------- ----------------------- ----------
2009-04-01 00:00:00.000 2009-10-01 00:00:00.000 有效
2009-02-28 00:00:00.000 2009-05-01 00:00:00.000 有效
2009-02-20 00:00:00.000 2009-10-01 00:00:00.000 有效
2009-03-01 00:00:00.000 2009-03-05 00:00:00.000 无效
2009-02-18 00:00:00.000 2009-02-20 00:00:00.000 无效(5 行受影响)
*/
FROM 表
ORDER 状态 ,发布日期 , 有效日期
order by 状态 desc,发布日期 desc
insert #tb select '2009-4-1','2009-10-1','有效'
insert #tb select '2009-3-1','2009-3-5','无效'
insert #tb select '2009-2-28','2009-5-1','有效'
insert #tb select '2009-2-20','2009-10-1','有效'
insert #tb select '2009-2-18','2009-2-20','无效'
select * from #tb order by 状态 desc,发布日期 desc发布日期 有效日期 状态
----------------------- ----------------------- ----------
2009-04-01 00:00:00.000 2009-10-01 00:00:00.000 有效
2009-02-28 00:00:00.000 2009-05-01 00:00:00.000 有效
2009-02-20 00:00:00.000 2009-10-01 00:00:00.000 有效
2009-03-01 00:00:00.000 2009-03-05 00:00:00.000 无效
2009-02-18 00:00:00.000 2009-02-20 00:00:00.000 无效(5 行受影响)
按状态降序(因为'有'字Ascii为211, '无'字Ascii为206, 无效排序在前, 所以用降序), 发布日期降序
select * from 表名 order by 状态 desc, 发布日期 desc
因为'有'字Ascii为166, '无'字Ascii为63才对把...