在Access 2007中,我有一个总计查询(其中我点击了总计按钮,并且它具有“group by”列)。大多数列都很好...按列,最大列,最小列等分组。对于其中的一些,我想只提取字符串列的最后一个非空(非“或空值)值。“Totals”查询:显示最后一个非空字符串
这里是什么我的SQL看起来像一个示例:
SELECT Min(Duplicates.AttendedODBefore) AS AttendedODBefore,
Min(Duplicates.ContactByPost) As ContactByPost,
Last(Duplicates.PlannedStart) As PlannedStart,
Min(Duplicates.AccessibilityRequirements) AS AccessibilityRequirements,
Last(Duplicates.UcasNumber) As UcasNumber
-- ^^^^
FROM DuplicateStudents As Duplicates
GROUP BY
Duplicates.ID
表达强调的是一个我想要改变的最后一个非空场。有没有一个Access特定的或普通的SQL表达式会这样做?
编辑:原来,Min()
和Max()
的字符串值工作而忽略空值,取第一个和最后一个值的字母顺序。这并不完美,因为它不能保证所选的值是最后一个值,但它比使用Last()
可能给出的空值负载要好。
最后的真正含义是什么?它意味着一种排序 - 这是表格不能保证的。因此,通过“最后”您明确需要指定表中某些列的排序。比如说,你想要订购的那一列叫做“入门时间”,然后你可以从DupStu中选择max(入门时间),其中UcasNumber不为空,以找出最后一个入口的“关键字” - 当然如果两个记录共享相同的“密钥”,这是行不通的... – 2010-12-23 09:50:39
@John感谢您的反馈意见。我不知道如何为'group by'排序记录,但它似乎并不重要,因为它们默认情况下是通过自动递增主键排序的,这使得它们按创建时的顺序排列。所以这真是一个问题。 – 2010-12-23 09:54:16