我有两个布局相似的表,包括INCOME和EXPENSES。
id
列是客户ID。
我需要一个客户总计金额的结果,总结收入和支出。
Table: Income
| id | amountIN|
+--------------+
| 1 | a |
| 2 | b |
| 3 | c |
| 4 | d |
Table: Expenses
| id | amountOUT|
+---------------+
| 1 | -x |
| 4 | -z |
我的问题是,有些客户只有开支而有些只是收入...所以无法提前知道我需要做LEFT or RIGHT JOIN.
在上面的示例中,RIGHT JOIN可以解决问题,但如果情况被颠倒(费用表上的客户越多),它就无法工作。
Expected Result
| id | TotalAmount|
+--------------+
| 1 | a - x |
| 2 | b |
| 3 | c |
| 4 | d - z |
任何帮助?
答案 0 :(得分:6)
select id, SUM(Amount)
from
(
select id, amountin as Amount
from Income
union all
select id, amountout as Amount
from Expense
) a
group by id
答案 1 :(得分:2)
我相信完整的加入会解决您的问题。
答案 2 :(得分:2)
我会把它当成一个联盟。在子查询中执行此操作然后对其进行总结。
例如:
select id, sum(amt) from
(
select i.id, i.amountIN as amt from Income i
union all
select e.id, e.amountOUT as amt from Expenses e
)
group by id
答案 3 :(得分:1)
你应该有另一个像客户端的表:
Table: Client
| id |
+----+
| 1 |
| 2 |
| 3 |
| 4 |
所以你可以做那样的事情
SELECT Client.ID, COALESCE(Income.AmountIN, 0) - COALESCE(Expenses.AmountOUT, 0)
FROM Client c
LEFT JOIN Income i ON i.ID = c.ID
LEFT JOIN Expense e ON e.ID = c.ID
会不那么复杂,我相信它会再次派上用场了:)