同一表中,同一字段升序和降序的问题?

zkp33 2016-02-01 03:33:38
有一表table1如:
字段:录入时间,完成状态
内容:2016-2-1 0
2016-2-2 1
2016-2-3 0
2016-2-4 0
2016-2-5 1
......

想要实现,首先完成状态为0的,排到最前且按录入时间升序,
完成状态为1的,排到后面且按录入时间降序。
请问sql查询语句如何写?谢谢!
如果是access数据库呢?

...全文
284 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xdashewan 2016-02-01
  • 打赏
  • 举报
回复

select *, ROW_NUMBER() over(order by time) from table_1 where status = 0
union all
select *, ROW_NUMBER() over(order by time desc) from table_1 where status = 1
道素 2016-02-01
  • 打赏
  • 举报
回复
正常做法:

WITH a(d,i) AS (
SELECT '2016-2-1', 0 UNION
SELECT '2016-2-2 ',1 UNION
SELECT '2016-2-3',0 UNION
SELECT '2016-2-4',0 UNION
SELECT '2016-2-5',1
)
SELECT * FROM a ORDER BY i, CASE WHEN i=0 THEN a.d END, CASE WHEN a.i=1 THEN a.d END DESC
野鼻孔 2016-02-01
  • 打赏
  • 举报
回复
select 录入时间,完成状态 from table1 order by 完成状态 ASC
道素 2016-02-01
  • 打赏
  • 举报
回复
取巧的办法,仅针对你这里的数据,完成状态=0是相当于没有后面的条件,等于1时日期按照降序排序

WITH a(d,i) AS (
SELECT '2016-2-1', 0 UNION
SELECT '2016-2-2 ',1 UNION
SELECT '2016-2-3',0 UNION
SELECT '2016-2-4',0 UNION
SELECT '2016-2-5',1
)
SELECT * FROM a ORDER BY i, DATEDIFF(d,a.d,'12/31/9999')*i

22,206

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧