首先,有关表之间的关系:
我正在尝试编写一个查询,该查询将检索:people_has_trips.people_personID,people_has_trips_tripID,研讨会名称,代理商和“金额”,该金额旨在是Trip表中给定条目的Payments表中所有条目的总数。这是相关的,因为该查询旨在在我正在构建的Access前端的子窗体中使用。简而言之,此查询的概念是:此人去过哪次旅行,每次旅行花了多少钱?
到目前为止,这是我的代码:
SELECT
people_has_trips.people_PersonID,
people_has_trips.trips_tripID,
people_has_trips.seminar_seminarID,
seminar.seminarname,
agentref.agent,
payments.amount
FROM
(seminar
INNER JOIN (((trips
INNER JOIN people_has_trips ON trips.tripID = people_has_trips.Trips_tripID)
INNER JOIN payments ON trips.tripID = payments.trips_tripID)
INNER JOIN agentnotes ON trips.tripID = agentnotes.Trips_tripID) ON seminar.seminarid = people_has_trips.seminar_seminarid)
INNER JOIN
agentref ON trips.agentref_agentid = agentref.agentid;
返回以下内容:
因此,我们已经完成了大部分工作,最终版本显然会被清理掉(例如,seminarID是不必要的),所以我唯一的问题是:我需要怎么做,而不是“金额”显示每个个人付款,这是一次旅行的全部付款吗?
奖励:敏锐的眼睛会注意到“研讨会”实际上是一个可选的外键,因此,此查询由内部联接构成,不包括人员和旅行的任何组合,其中不包括研讨会。这不是故意的,这是我需要解决的另一个问题。
最佳答案
很抱歉重新排列SQL,但是在重新组织它之前,我很难跟踪正在发生的事情。
如果您GROUP BY
除付款金额以外的列,则可以使用SUM
之类的汇总函数来获取付款总额。
SELECT
people_has_trips.people_PersonID,
people_has_trips.trips_tripID,
people_has_trips.seminar_seminarID,
seminar.seminarname,
agentref.agent,
SUM(payments.amount)
FROM seminar
INNER JOIN people_has_trips
ON
people_has_trips.seminar_seminarid = seminar.seminarid
INNER JOIN trips
ON
people_has_trips.Trips_tripID = trips.tripID
INNER JOIN payments
ON
trips.tripID = payments.trips_tripID
INNER JOIN agentnotes
ON
agentnotes.Trips_tripID = trips.tripID
INNER JOIN agentref
ON
agentref.agentid = trips.agentref_agentid
GROUP BY
people_has_trips.trips_tripID,
people_has_trips.people_PersonID,
people_has_trips.seminar_seminarID,
seminar.seminarname,
agentref.agent
;