2016-03-17 33 views
0

我有三个表:MySQL的特定列相加

Bank_Account(Tran_Id, Pay_Id, Expense_Id, Amount, Balance) 
Payment(Pay_Id, Client_Id, Date_Payment, Amount) 
Expense(Expense_Id, Emp_Id, Amount, Expense) 

在这Tran_Id对于Bank_Account主键和同为Pay_IdPaymentExpense_IdExpense为好。在Bank_AccountPay_IdExpense_Id为空,反之亦然。现在我想用Bank_Account来计算公司的利润。那么,如何使用SQL脚本来计算(基于Pay_Id的总金额 - 基于Expense_Id的金额总和)。

+0

这里Pay_Id和Expense_Id是Bank_Account的外键。 –

+1

这应该是一个简单的JOIN以及'SUM'和'GROUP BY'来计算每个帐户的总计。 – Barmar

回答

0

我想,这应该是你的陈述,但我认为,你错过了一个字段,在你的Bank_Account表(即公司)中进行分组。 你想知道,公司的金额或?

SELECT <missingFieldCompany>, SUM(Payment.Amount) as Payments, SUM(Expense.Amount) as Expenses, SUM(Payment.Amount) - SUM(Expense.Amount) as Overall 
FROM Bank_Account 
LEFT JOIN Payment ON Payment.Pay_Id = Bank_Account.Pay_Id 
LEFT JOIN Expense ON Expense.Expense_Id = Bank_Account.Expense_Id 
GROUP BY <missingFieldCompany> 
0

试试这个:

select 
    SUM(Amount * (Pay_Id IS NOT NULL)) AS PayIdAmt, 
    SUM(Amount * (Expense_Id IS NOT NULL)) AS ExpenseIdAmt 
FROM Bank_Account 
+0

本声明将总结两张表中的所有付款和费用!我想,这不是预料! –

+0

实际上,我想每次计算整体利润,可以使用支付 - 费用中找到....所以我认为你的答案是好的,但我需要不同的东西 –

0
SELECT SUM(p.Amount) as payments, SUM(e.Amount) as expenses, 
SUM(p.Amount) - SUM(e.Amount) as total_amount 
FROM Bank_Account as b 
LEFT JOIN Payment as p ON p.Pay_Id = b.Pay_Id 
LEFT JOIN Expense as e ON e.Expense_Id = b.Expense_Id 
+0

它给我的付款表的金额列的唯一总数。 .... –

0

下面我查询工作努力更上之后.....

选择 (b2.total2 - b1.total1)作为总数为 从 (选择SUM(金额)作为来自Bank_Account的总计1,其中Pay_Id为NULL)b1,(作为来自Bank_Account的总数为2的选择总和(金额),其中Pay_Id不为空)b2