使用FireDac聚合

时间:2014-07-28 20:15:51

标签: delphi firedac aggregates

我正在使用XE6和FireDac。我有一个带有ItemVals的FDMemTable作为ftfloat字段。我想使用SUM(ItemVals)的聚合函数,但我想只添加值为> 0的ItemVals .ItemVals是ftfloat但是据我所知,我不能为a赋值空值浮动。所以我使用值-1来表示(对我来说)一个空值。我尝试了SUM(ItemVals)> 0但它只返回一个TRUE。谁能指出我正确的方向?感谢。

1 个答案:

答案 0 :(得分:3)

您可以使用extended expression syntax并使用SUMIIF表达式条件写入,并在大于0时返回字段值,在小于或等于0时返回0。这样:

Aggregate.Expression := 'SUM(IIF(ItemVals > 0, ItemVals, 0))';

但回到问题的根源。您已经说过,您无法找到为ftFloat数据类型的字段分配NULL值的方法。我的猜测是你以这种方式分配价值:

FDMemTable.FieldByName('ItemVals').AsFloat := 1.23;

是的,这样你真的无法分配NULL值,但你可以通过字段的Value属性来完成,例如:

FDMemTable.FieldByName('ItemVals').Value := NULL;

分配NULL值而不是-1将更好地描述无值的意图,并将聚合表达式简化回SUM(ItemVals)