【发布时间】:2013-09-24 19:59:27
【问题描述】:
抱歉标题,但我想不出更好的主题来解决我的问题。
我有两个表,它们之间存在多对一关系,同一张表中还有另一个多对一关系。我需要对与第一个表的列中的聚合相对应的列求和。
这是一个说明我想要什么的图片:
我不知道该怎么做。
【问题讨论】:
标签: sql sql-server sum aggregate-functions
抱歉标题,但我想不出更好的主题来解决我的问题。
我有两个表,它们之间存在多对一关系,同一张表中还有另一个多对一关系。我需要对与第一个表的列中的聚合相对应的列求和。
这是一个说明我想要什么的图片:
我不知道该怎么做。
【问题讨论】:
标签: sql sql-server sum aggregate-functions
应该这样做:
SELECT ISNULL(E.idParent,E.id) Id,
SUM(I.Value) [Sum]
FROM EXPENSE_TABLE E
LEFT JOIN INVOICE_TABLE I
ON I.idExpense = E.id
GROUP BY ISNULL(E.idParent,E.id)
对于更新的需求:
SELECT ISNULL(E.idParent,E.id) Id,
E2.[description],
SUM(I.Value) [Sum]
FROM EXPENSE_TABLE E
LEFT JOIN INVOICE_TABLE I
ON I.idExpense = E.id
INNER JOIN EXPENSE_TABLE E2
ON ISNULL(E.idParent,E.id) = E2.id
GROUP BY ISNULL(E.idParent,E.id),
E2.[description]
【讨论】:
EXPENSE_TABLE 中的父行似乎在INVOICE_TABLE 中没有数据。结果,我也不需要 ISNULL 。 (不过,我意识到人们有时会提供不完整的数据样本,所以我也会在我的回答中说明我的所有假设。)
您可以通过对连接到 INVOICE_TABLE 的 EXPENSE_TABLE 的结果执行聚合求和操作来获得您要查找的结果。
例如:
SELECT e.idParent, SUM(i.value)
FROM EXPENSE_TABLE AS e
INNER JOIN INVOICE_TABLE AS i ON i.idExpense = e.id
GROUP BY e.idParent
ORDER BY e.idParent
【讨论】: