值我有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
.
.
.
我對這個問題的不完善標題道歉,但我REA lly不知道如何描述這個問題。
我已經選擇了第二個選項。對未來的讀者來說,**和重要的一點是:**'ISNULL'函數在SQL Server和MS Access中不一樣,在MS Access中使用'NZ'代替! Upvoted並正式接受。謝謝。最好的問候,直到下一次! – AlwaysLearningNewStuff 2015-02-10 06:01:54