У меня есть 2 таблицы, tblBasicInfo
и tblPayment
.Вычитание значения из родительской таблицы с SUM (значение из детской таблицы)
Отношения 1 для многих, где tblBasicInfo
находится на 1-й стороне, а tblPayment
находится на стороне many
.
Отношения не являются обязательными и в этом и состоит проблема.
Мне нужно вычесть значение определенного поля из родительской таблицы с суммой определенных полей из дочерней таблицы , которые соответствуют определенным критериям.
Если в дочерней таблице нет записей, соответствующих критериям, то это должно быть представлено нулем (data from parent table - 0
).
Прошу прощения, если это не кристально ясно, английский не мой родной, и я недостаточно опыт, чтобы знать, как правильно описать проблему.
Было бы лучше, чтобы продемонстрировать, что я имею в виду с небольшим примером:
Мы будем исходить из схемы таблицы:
tblBasicInfo: #ID, TotalPrice (double)
tblPayment: #P_ID, $ID, Amount (double), IsPaid (bool)
Вот содержание для родительской таблицы tblBasicInfo
:
ID | TotalPrice
1 | 100
2 | 150
3 | 200
4 | 250
Вот содержание для детского стола tblPayment
:
P_ID | ID | IsPaid | Amount
1 | 1 | true | 50
2 | 1 | false | 25
3 | 2 | false | 100
4 | 2 | false | 25
5 | 3 | true | 200
Это то, что я достиг сам по себе:
SELECT tblBasicInfo.ID,
(tblBasicInfo.TotalPrice - sum(tblPayment.Amount)) AS [Difference]
FROM tblBasicInfo, tblPayment
WHERE (tblBasicInfo.ID = tblPayment.ID)
GROUP BY tblBasicInfo.TotalPrice, tblPayment.IsPaid
HAVING (tblPayment.IsPaid = TRUE) --this is the criteria I talked above
ORDER BY tblBasicInfo.ID;
Это то, что я получаю из приведенного выше запроса:
ID | Difference
1 | 50
3 | 0
.
.
.
мне нужно получить следующий результат:
ID | Difference
1 | 50
2 | 150 -- does not meet the criteria (IsPayed = false)
3 | 0
4 | 250 -- no records in child table
.
.
.
Приносим извинения за неправильное название вопроса, но я знаю lly не знал, как описать эту проблему.
Я выбрал второй вариант. Одна заметка для будущих читателей ** и важная: ** Функция 'ISNULL' - это не то же самое в SQL Server и MS Access, в MS Access вместо нее используется' NZ'! Утверждено и официально принято. Спасибо. С наилучшими пожеланиями до следующего раза! – AlwaysLearningNewStuff