Запрос, нужна срочная помощь!!!!!!

Привет всем. У меня проблема с выполнением запроса. Есть 3 таблицы: «Субподряд реестр»-хранит договора, «Субподряд выполнено»-хранятся все выполненные работы по договорам, «Субподряд оплачено»-все оплаты по выполненным работам. Нужно сделать запрос: Вычислить задолженность по каждому договору для выполненных работ и оплат. И если эта задолженность превышает более 3 лет, вывести ее в др. колонку. У меня получилось вот что.
SELECT [Субподряд реестр].Исполнитель, [Субподряд реестр].[Источник финансирования], [Субподряд реестр].[Номер договора], SUM([Субподряд выполнено]!Сумма) AS выполнено, SUM([Субподряд оплата]![Сумма платежа]) AS оплачено, MAX([Субподряд выполнено].[Дата Акта]) AS [Max-Дата Акта], DATE()-[Max-Дата Акта] AS Срок, IIf([Срок]>1095,NULL,[выполнено]-[оплачено]) AS задолженность, IIf([Срок]>1095,[выполнено]-[оплачено],NULL) AS более
FROM ([Субподряд реестр] INNER JOIN [Субподряд выполнено] ON [Субподряд реестр].[Номер договора] = [Субподряд выполнено].Договор) INNER JOIN [Субподряд оплата] ON [Субподряд реестр].[Номер договора] = [Субподряд оплата].Договор
GROUP BY [Субподряд реестр].Исполнитель, [Субподряд реестр].[Источник финансирования], [Субподряд реестр].[Номер договора];
Но при проверки оказалось, что общую сумму для вып. работ и оплат он выдает не правильно и к тому же не учитывает те договоры по которым не было еще оплат.Кто подскажет в чем проблема? Помогите пожайлуста, это очень важно.
3 ответа

Используйте левое внешнее объединение таблиц. LEFT JOIN вместо INNER JOIN


Попробуйте пока построить запрос на выборку, на основе субподряд реестра, к нему по коду договора объедините субподряд выполнено и субподряд оплачено. Выведите необходимые поля. В этом же запросе посчитайте сроки. Запустите запрос, проверьте все ли правильно. А потом сохраните этот запрос на выборку и на основе этого запроса сделайте другой запрос с группировкой по необходимым полям и со счетом и со всем с чем необходимо. Вполне возможно, может быть у вас в некоторых полях, по которому идут вычисления стоит пустое значение (null) и запрос их выкидывает. В общем, это пока что общие советы, если бы была возможность глянуть на БД, возможно ответ был бы получше. Удачи!


Vasolka, пришлите базу данных (в ZIP, что-ли) сделаем Вам запрос.