Sql 已向每位客户提供的融资总额
我有三张不同的桌子:Sql 已向每位客户提供的融资总额,sql,ms-access,inner-join,Sql,Ms Access,Inner Join,我有三张不同的桌子: SystemA_Cash SystemA_Loans SystemB_CarLoans 每个表都有Cash\u AdvanceID字段、Customer、&资金金额 我需要计算每个客户的资金总额 每个客户也可以出现在任何表格中 到目前为止我做到了 SELECT SystemA_CashAdvances.CashAdvanceID, SystemA_CashAdvances.Customer, SystemA_CashAdvances.Funded_Amount FR
SystemA_Cash
SystemA_Loans
SystemB_CarLoans
每个表都有Cash\u AdvanceID
字段、Customer
、&资金金额
我需要计算每个客户的资金总额
每个客户也可以出现在任何表格中
到目前为止我做到了
SELECT SystemA_CashAdvances.CashAdvanceID, SystemA_CashAdvances.Customer,
SystemA_CashAdvances.Funded_Amount
FROM
SystemA_CashAdvances
INNER JOIN
SystemA_Loans ON SystemA_Loans.CashAdvanceID = SystemA_CashAdvances.Cash_AdvanceID
INNER JOIN
SytemB_CarLoans ON SystemA_CashAdvances.Cash_AdvanceID = SystemB_CarLoans.CashAdvanceID;
它似乎没有返回一张包含客户的表以及每个表的资金总额。为此,您可以使用
UNION
和groupby
,例如:
SELECT Cash_AdvanceID,
Customer,
SUM(Funded_Amount) AS "Total_Funded_Amount"
FROM (
SELECT Cash_AdvanceID,
Customer,
Funded_Amount
FROM SystemA_CashAdvances
UNION
SELECT Cash_AdvanceID,
Customer,
Funded_Amount
FROM SystemA_Loans
UNION
SELECT Cash_AdvanceID,
Customer,
Funded_Amount
FROM SytemB_CarLoans
)
GROUP BY Cash_AdvanceID,
Customer;
使用JOIN
执行此操作将很困难,因为MS Access不像其他数据库引擎那样支持完全外部连接。最近的是单面外部连接,如下所示:
SELECT a.Cash_AdvanceID,
a.Customer,
a.Funded_Amount + Nz(l.Funded_Amount)
+ Nz(c.Funded_Amount) AS "Total_Funded_Amount"
FROM (SystemA_CashAdvances AS a
LEFT JOIN SystemA_Loans AS l
ON a.Cash_AdvanceID = l.Cash_AdvanceID)
LEFT JOIN SytemB_CarLoans AS c
ON a.Cash_AdvanceID = c.Cash_AdvanceID;
以上内容适用于至少出现在SystemA\u CashAdvances表中的客户。如果它们仅出现在另一个表中,则将从结果中排除。为了让这些人也参与进来,您需要再次使用
UNION
,这让我们回到上面的第一个解决方案。您使用的是什么数据库?MySQL和MS Access非常不同。相应地标记您的问题。您需要结果中的CashAdvanceID
做什么,如果需要,您想用它做什么?我想这三个表中可能有不同的值,即使对于同一个客户也是如此。这不应该被忽略吗?嘿,戈登,我在itTrincot中使用ms-access和sql。CasyAdvEnSnID是所有三个表中的主键。如果您愿意,请考虑以下简单的两步过程:1。如果您还没有这样做,请提供适当的CREATE和INSERT语句(和/或SQLFIDLE),以便我们可以更轻松地复制问题。2.如果您还没有这样做,请提供一个与步骤1中提供的信息相对应的所需结果集。嘿,这样做是可行的,但它给了我两列,一列是客户,但其编号而不是名称和资金总额。最终输出最好是3列。ID、客户、资金总额。第二个字段有客户名称,第一个字段有现金预付ID。用3列更新答案。您仍然没有说客户名称存储在哪里。非常感谢!在这三个表中的每一个表都有3列1)现金预付款2)客户(客户名称)3)资金金额。每个客户都可以在任何表中。一次或两次,因为它适用于不同类型的基金,所以我认为在这种情况下,内部联接可能比联合更好