我将 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).

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top