Поскольку кажется, что у вас все еще нет полного ответа, у вас есть хорошая идея по подзапросам WHERE, но давайте по одному фрагменту за раз. Вы хотите запросы за январь против февраля, но за текущий год, а не за все годы. Мы можем получить это для каждого автомобиля в одном запросе с небольшой хитростью для вас, но часто встречаются во многих других, так как они узнают больше запросов.
select
cm.code_car,
sum( iif( month( cm.Date_Exec ) = 1, cm.rout_dist, 00000 )) as JanTotal,
sum( iif( month( cm.Date_Exec ) = 2, cm.rout_dist, 00000 )) as FebTotal
from
car_move cm
where
cm.Date_Exec >= date(2020,1,1)
AND cm.Date_Exec < date(2020,3,1)
group by
cm.code_car
(я знаю, что в VFP напрямую вам нужно использовать точку с запятой после каждой строки или это ошибка для вас) Итак, насколько я знаю, вы знаете о IIF (), это подтверждает месяц и суммирует только сумму, если это месяц, о котором идет речь, и различие между январем и февралем. Предложение Where явно получает что-либо 1 января 2020 года и позже, чем МЕНЬШЕ, чем 1 марта 2020 года. Таким образом, вы знаете, что получите только записи за январь / февраль.
Теперь, одно предупреждение на VFP SQL - Выбрать. Фактически он запускает запрос один раз, чтобы получить запись для окончательной структуры результатов, а затем запускается снова, чтобы фактически заполнить запрос результата. Если размер rout_dist больше 5 цифр, просто разверните его, чтобы убедиться, что значения не усечены.
Сначала посмотрите на результаты вышеупомянутого ...
Это также предварительно группирует по code_car все в одном. Итак, теперь, когда вы подтвердите, что результаты функциональности только суммирования в порядке, теперь мы можем перейти к следующему шагу, исключить некоторые записи и получить сведения об оставшихся автомобилях. Приведенный выше запрос становится источником записей «FROM», ему присваивается псевдоним «PreQuery», и он предназначен только для контекста, поскольку внутренний запрос выполнен, а результаты возвращены перед внешним запросом, поэтому я присвоил ему псевдоним «PreQuery».
select
PreQuery.Code_Car,
cl.info_car,
PreQuery.JanTotal
from
( select
cm.code_car,
sum( iif( month( cm.Date_Exec ) = 1, cm.rout_dist, 00000 )) as JanTotal,
sum( iif( month( cm.Date_Exec ) = 2, cm.rout_dist, 00000 )) as FebTotal
from
car_move cm
where
cm.Date_Exec >= date(2020,1,1)
AND cm.Date_Exec < date(2020,3,1)
group by
cm.code_car ) PreQuery
JOIN Car_List cl
on PreQuery.Code_Car = cl.Code_Car
where
PreQuery.JanTotal < PreQuery.FebTotal
Существует много других приемов, особенно в отношении очень сложных запросов, где вы можете разбить их на более мелкие разделы с помощью запроса INTO CURSOR, который создает временную таблицу, которая затем может быть одним из запросов, следующих в другом SQL как будто это тоже фактическая таблица.