Использование агрегатов FireDAC
-
20-12-2019 - |
Вопрос
Я использую XE6 с FireDAC.У меня есть FDMemTable с ItemVals в качестве поля ftfloat.Я хотел бы использовать агрегатную функцию SUM (ItemVals), но я бы хотел, чтобы добавлялись только ItemVals со значением> 0.ItemVals - это ftfloat, но, насколько я могу судить, я не могу присвоить нулевое значение float.Поэтому я использую значение -1, чтобы указать (для меня) нулевое значение.Я попробовал SUM(ItemVals)>0, но он просто возвращает значение TRUE.Кто-нибудь может указать мне правильное направление?Спасибо.
Решение
Вы можете использовать extended expression syntax
и писать для вашего SUM
условие выражения с IIF
и возвращайте значение поля, когда оно больше 0, и 0, когда оно меньше или равно 0.Вот так , например:
Aggregate.Expression := 'SUM(IIF(ItemVals > 0, ItemVals, 0))';
Но вернемся к сути вашего вопроса.Вы сказали, что вы не можете найти способ присвоить НУЛЕВОЕ значение полю ftFloat
тип данных.Я предполагаю, что вы присваиваете значения таким образом:
FDMemTable.FieldByName('ItemVals').AsFloat := 1.23;
Да, таким образом, вы действительно не можете присвоить НУЛЕВОЕ значение, но вы можете сделать это с помощью Value
свойство поля, например:
FDMemTable.FieldByName('ItemVals').Value := NULL;
Присвоение нулевого значения вместо -1 намного лучше опишет намерение не использовать значение и упростит ваше агрегированное выражение до SUM(ItemVals)
.