是否有一个接受/更好的方法来聚合Access查询中的布尔数据?
我有两个相关的表,第一个表包含来自第二个表的数据的分组摘要。第二个表中的一个字段是布尔值yes / no标志,表示该行需要“注意”。
我计划在第二个表的各行上执行OR,并将结果存储在第一个表中,以指示表2中的“至少一个”关联行需要“关注”。
我看到Access存储False为0,True存储为-1,所以刚刚使用了SUM / GROUP BY,似乎已经实现了我的目标。每个True值(-1)求和并给出一个负数,Access似乎很乐意将其解释为True。但是我注意到似乎没有任何方法可以执行AND操作(乘法?),这让我觉得我使用的这种方法有点像黑客,可能会产生一些意想不到的后果。
答案 0 :(得分:2)
为什么不使用Sum(-MyFlag)
并将其与Count(*)
进行比较?然后,您可以测试两个数字是否相等。
答案 1 :(得分:0)
虽然Access数据库确实在内部将Yes / No值分别存储为-1和0,但使用适当的方法处理列的实际类型并不依赖于"快捷方式&#34是一种良好的做法。 ;基于其潜在的内部价值。例如,最好使用DateAdd()
和DateDiff()
函数,而不是[Date1]+30
或[Date2]-[Date1]
。
因此,对于布尔值,我建议使用Sum(IIf([NeedsAttention]=True,1,0))
来计算[NeedsAttention] = True的行数。