如何按升序对列进行排序,最后将NULL值排序?

时间:2019-09-09 13:09:51

标签: sql ms-access ms-access-2016

我正在使用个人数据库来跟踪我的项目。

我在查询中以升序排序的表中有一个日期/时间列,名为StartDate,该查询用作输入数据的表单的数据源。

该表单是一个拆分表单,以表格格式显示“详细信息”部分中的数据。

到目前为止,我已经输入了分配的项目,但是现在我还需要跟踪将要分配但尚未分配的常见项目。

要对此进行跟踪,我想输入没有开始日期的未来项目。

但是,当我输入这样的记录时,它们将排在顶部,而不是我喜欢的列表的底部。

是否有任何方法可以覆盖排序,以便StartDate列中具有值的记录以升序排列,但是StartDate列中没有值的记录将在末尾排序? / p>

谢谢!

3 个答案:

答案 0 :(得分:6)

如果您在日期字段上进行任何计算,则将失去对该索引的使用。

因此请检查

SELECT 
    startdate, id
FROM 
    YourTable
ORDER BY
    StartDate Is Null,
    StartDate

答案 1 :(得分:1)

一种可能是这样排序:

ORDER BY Nz([StartDate], CDate("31.12.2999"))

此处,函数NZ用于将Null值(“仅在查询中”在运行中)转换为日期31.12.2999,因此可以根据需要进行排序。

答案 2 :(得分:0)

您可以创建一个计算字段来排序数据。

我用日期创建了一个简单的表(名为tbl),其中一些带有空格:

enter image description here

如您所见,ID为4,5和9的行在StartDate中为空白

然后,我用一个计算字段组成了查询,该查询将检查字段StartDate 不是是否为空白。如果为true,则返回0,如果为false,则返回1。这样,所有空白Startdate行将返回1,非空白行将返回0。然后按此计算字段进行排序,然后按StartDate进行第二次排序。字段。

计算字段的公式为:IIf(IsNull([StartDate])=False,0,1)

查询的SQL代码为:

SELECT tbl.startdate, tbl.id
FROM tbl
ORDER BY IIf(IsNull([StartDate])=False,0,1), tbl.startdate

我得到这个作为输出:

enter image description here

如您所见,ID为4,5和9的行在StartDate中为空白,位于记录集的底部。

希望您可以根据自己的需要对此进行调整。