值我有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