我有一个带有活动列表的 SQL Server (RDBMS) 表。每个活动都有一个开始和结束日期。
要求是对它们进行排序,以便首先显示具有 NULL 结束日期的那些(这表明“当前” - 开始日期降序),但是具有 start 和 end 值的那些将在“当前”行并按 end_date 降序排序。
最后,所有开始日期和结束日期为 null 的值都必须位于结果集的末尾。
具有结束日期但开始日期为空的值应在 END date desc 片段中排序的第二部分中进行排序。
我有一个带有活动列表的 SQL Server (RDBMS) 表。每个活动都有一个开始和结束日期。
要求是对它们进行排序,以便首先显示具有 NULL 结束日期的那些(这表明“当前” - 开始日期降序),但是具有 start 和 end 值的那些将在“当前”行并按 end_date 降序排序。
最后,所有开始日期和结束日期为 null 的值都必须位于结果集的末尾。
具有结束日期但开始日期为空的值应在 END date desc 片段中排序的第二部分中进行排序。
您可以在 中使用
CASE
表达式ORDER BY
:按顺序排序标准(链接):
如果全局顺序不是您所期望的,您可以使用 ASC 和 DESC 以及列顺序。
样本数据和查询:
输出:
此
ORDER BY
子句 ( link ) 将在末尾放置双 NULL (Start + End):在我看来,根据问题,简单地按 EndDate 排序就可以解决问题...... OP 没有指定按降序返回结果。事实上,他根本没有说明行需要按 StartDate 排序。由于 NULL 日期将在具有值的日期之前排序,
ORDER BY EndDate
因此满足要求。否则,ORDER BY EndDate, StartDate
应该足够了。使用@Julien 的示例代码,最终的 SELECT 可能如下所示: