题
我将 XE6 与 FireDac 一起使用。我有一个 FDMemTable,其中 ItemVals 作为 ftfloat 字段。我想使用 SUM(ItemVals) 的聚合函数,但我只想添加值 >0 的 ItemVals。ItemVals 是一个 ftfloat,但据我所知,我无法将 null 值分配给浮点数。因此,我使用值 -1 来指示(对我而言)空值。我尝试了 SUM(ItemVals)>0 但它只返回 TRUE。有人能指出我正确的方向吗?谢谢。
解决方案
您可以使用 extended expression syntax
并为你写 SUM
表达条件与 IIF
大于0时返回字段值,小于等于0时返回0。像这样:
Aggregate.Expression := 'SUM(IIF(ItemVals > 0, ItemVals, 0))';
但回到你问题的根源。您说过,您无法找到一种方法将 NULL 值分配给以下字段: ftFloat
数据类型。我的猜测是您以这种方式分配值:
FDMemTable.FieldByName('ItemVals').AsFloat := 1.23;
是的,这样你确实不能分配 NULL 值,但你可以通过 Value
字段的属性,例如:
FDMemTable.FieldByName('ItemVals').Value := NULL;
分配 NULL 值而不是 -1 将更好地描述无值的意图,并将聚合表达式简化回 SUM(ItemVals)
.
不隶属于 StackOverflow