涉及连接的SQL问题
我有两张布局相似的桌子,包括收入和支出。涉及连接的SQL问题,sql,sql-server,sql-server-2008,tsql,aggregate-functions,Sql,Sql Server,Sql Server 2008,Tsql,Aggregate Functions,我有两张布局相似的桌子,包括收入和支出。 id列是客户id 我需要一个客户总金额的结果,总结收入和费用 Table: Income | id | amountIN| +--------------+ | 1 | a | | 2 | b | | 3 | c | | 4 | d | Table: Expenses | id | amountOUT| +---------------+ | 1 | -x |
id
列是客户id
我需要一个客户总金额的结果,总结收入和费用
Table: Income
| id | amountIN|
+--------------+
| 1 | a |
| 2 | b |
| 3 | c |
| 4 | d |
Table: Expenses
| id | amountOUT|
+---------------+
| 1 | -x |
| 4 | -z |
我的问题是,一些客户只有费用,而另一些客户只有收入。。。所以不能预先知道我需要做一个左或右连接。
在上面的例子中,一个右连接可以起作用,但是如果情况相反(费用表上的客户更多),它就不起作用
Expected Result
| id | TotalAmount|
+--------------+
| 1 | a - x |
| 2 | b |
| 3 | c |
| 4 | d - z |
有什么帮助吗?我相信完全连接可以解决您的问题。我相信完全连接可以解决您的问题。您真的应该有另一个表,如客户端:
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
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
这样就不那么复杂了,我相信下次它会派上用场:)你真的应该有另一个类似客户机的表格:
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
这样就不那么复杂了,我相信下次它会派上用场的:)我会把它当作一个联盟来对待。在子查询中执行此操作,然后对其求和 例如:
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
我会把这当作一个联盟。在子查询中执行此操作,然后对其求和 例如:
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
你试过什么?这是一个涉及聚合函数的简单语句。您尝试过什么?这是一个涉及聚合函数的简单语句。