【发布时间】:2015-10-04 07:07:50
【问题描述】:
我正在努力解决 Oracle SQL 中的一个问题。
我将举例说明。我要查询三个表:
Employees
__________________________________________
| EmployeeID | Name |
| 1 | John Smith |
| 2 | Douglas Hoppalot |
| 3 | Harry Holiday |
...
InternalCosts
________________________________
| IntID | Amount | EmployeeID |
| 1 | 10 | 1 |
| 2 | 20 | 2 |
| 3 | 30 | 1 |
...
ExternalCosts
________________________________
| ExtID | Amount | EmployeeID |
| 1 | 40 | 1 |
| 2 | 50 | 2 |
| 3 | 60 | 1 |
...
我想要实现的是每个员工一行的结果,以及他们每个内部和外部成本的总和,即
____________________________________________________________
| Name | InternalCostTotal | ExternalCostTotal |
| John Smith | 40 | 100 |
| Douglas Hoppalot | 20 | 50 |
...
我遇到的问题是,当我同时查询 InternalCosts 和 ExternalCosts 表时,我得到了每个成本排列,而不仅仅是每个员工一个。当我按员工姓名分组并对金额字段求和时,值太高了。我尝试过的:
SELECT emp.Name, sum(int.Amount), sum(ext.Amount)
FROM Employees emp,
InternalCosts int,
ExternalCosts ext
WHERE emp.EmployeeId = int.EmployeeID
and emp.EmployeeID = ext.EmployeeID
GROUP BY emp.Name
上面的例子会返回:
____________________________________________________________
| Name | InternalCostTotal | ExternalCostTotal |
| John Smith | 80 | 200 | <- too high!
| Douglas Hoppalot | 20 | 50 |
...
感谢任何帮助/建议/想法!
【问题讨论】:
-
问题是当你用 internalcosts 连接员工时,当employeeid =1 时你会得到两行,当你用 externalcosts 连接结果的 2 行时,它将返回 4 行,然后计算总和。将 int.extid=int.intid 放在 where 子句中。
标签: sql oracle select group-by sum