合计一个 table 中的金额并加入其他 table 中的总金额
Sum amounts in one table and join total amount from other table
我在这里不是最 SQL 精明的,但我正在尝试连接两个表(一个包含费用数据,一个包含预算数据)。我似乎无法找出正确的代码来按字段对费用求和,然后将其与这些特定字段的预算金额相结合。
这是我正在处理的数据示例:
Expenses Table
BudgetAccount Department Entity Date Amount
Other Expenses Finance A 9/1/2019 100
Other Expenses Finance A 9/1/2019 300
Other Expenses Finance A 9/1/2019 50
Utilities Finance A 9/1/2019 200
Utilities Construction B 9/1/2019 300
Insurance Construction B 9/1/2019 400
Legal HR A 9/1/2019 500
Other Expenses HR A 9/1/2019 100
Legal HR A 9/1/2019 50
Budget Table
BudgetAccount Department Entity Date Amount
Other Expenses Finance A 9/1/2019 500
Utilities Finance A 9/1/2019 200
Insurance Construction B 9/1/2019 450
Utilities Construction B 9/1/2019 400
Legal HR A 9/1/2019 800
Other Expenses HR A 9/1/2019 50
这是我想要得到的最终产品:
BudgetAccount Department Entity Date Actual Budget
Other Expenses Finance A 9/1/2019 450 500
Utilities Finance A 9/1/2019 200 200
Insurance Construction B 9/1/2019 400 450
Utilities Construction B 9/1/2019 300 400
Legal HR A 9/1/2019 550 800
Other Expenses HR A 9/1/2019 100 50
我试过以下代码:
SELECT e.budgetaccount, e.department, e.entity, e.date, SUM(e.amount) AS Actual, b.amount
FROM expenses AS e
INNER JOIN (SELECT b.budgetaccount, b.department, b.entity, b.date, b.amount FROM budget AS b)
ON e.budgetaccount = b.budgetaccount
AND e.department = b.department
AND e.entity = b.entity
AND e.date = b.date
GROUP BY e.budgetaccount, e.department, e.entity, e.date
。 . .这是我在尝试 运行 Tableau 中的查询时遇到的错误:
Error Message
我确信我在上面尝试做的很糟糕的编码中有很多错误,但是非常感谢任何帮助我指出正确方向的帮助。
我相信您的查询已经很接近了。似乎不需要 sub select,需要添加额外的 SUM
SELECT e.budgetaccount, e.department, e.entity, e.date, SUM(e.amount) AS Actual, SUM(b.amount) as budget
FROM expenses AS e
JOIN budget AS b
ON e.budgetaccount = b.budgetaccount
AND e.department = b.department
AND e.entity = b.entity
AND e.date = b.date
GROUP BY e.budgetaccount, e.department, e.entity, e.date
我想您可能遇到的唯一错误是 not a group by etc.
,因为行数与 budgetamount 行不匹配,您应该设置预算金额的最大值。事实上,内部联接会将第二条 table 记录作为输出,但事实是列数量和预算数量列的记录数量不同,因此数据要么冗余,要么更多,具体取决于哪个 table 列有更多记录因此所有第一个 table 记录是内部连接的实际 o/p 并且在其上放置一个组将通过总和聚合减少实际数量行但保持 table 预算金额列记录尽可能多,因为没有聚合等。虽然 table 预算帐户在第一个 table 中每个唯一行只有 1 个预算金额,但这并不意味着在最坏的情况下不能有多个,所以分组期望在 budgetamount 列上进行汇总以保持数据一致
Select... max(b.amount)..
Rest the same query
发现两个问题
1) table 名称别名 b
的错误位置
2 ) 您需要所有不在聚合函数中的列 mentione din group by
SELECT e.budgetaccount, e.department, e.entity, e.date, SUM(e.amount) AS Actual, b.amount
FROM expenses AS e
LEFT JOIN (
SELECT budgetaccount
, department
, entity
, date
, amount
FROM budget
) b ON e.budgetaccount = b.budgetaccount
AND e.department = b.department
AND e.entity = b.entity
AND e.date = b.date
GROUP BY e.budgetaccount, e.department, e.entity, e.date, b.amount
无论如何你可以避免预算子查询 table ..
SELECT e.budgetaccount, e.department, e.entity, e.date, SUM(e.amount) AS Actual, b.amount
FROM expenses AS e
LEFT JOIN budget b ON e.budgetaccount = b.budgetaccount
AND e.department = b.department
AND e.entity = b.entity
AND e.date = b.date
GROUP BY e.budgetaccount, e.department, e.entity, e.date, b.amount
我在这里不是最 SQL 精明的,但我正在尝试连接两个表(一个包含费用数据,一个包含预算数据)。我似乎无法找出正确的代码来按字段对费用求和,然后将其与这些特定字段的预算金额相结合。
这是我正在处理的数据示例:
Expenses Table
BudgetAccount Department Entity Date Amount
Other Expenses Finance A 9/1/2019 100
Other Expenses Finance A 9/1/2019 300
Other Expenses Finance A 9/1/2019 50
Utilities Finance A 9/1/2019 200
Utilities Construction B 9/1/2019 300
Insurance Construction B 9/1/2019 400
Legal HR A 9/1/2019 500
Other Expenses HR A 9/1/2019 100
Legal HR A 9/1/2019 50
Budget Table
BudgetAccount Department Entity Date Amount
Other Expenses Finance A 9/1/2019 500
Utilities Finance A 9/1/2019 200
Insurance Construction B 9/1/2019 450
Utilities Construction B 9/1/2019 400
Legal HR A 9/1/2019 800
Other Expenses HR A 9/1/2019 50
这是我想要得到的最终产品:
BudgetAccount Department Entity Date Actual Budget
Other Expenses Finance A 9/1/2019 450 500
Utilities Finance A 9/1/2019 200 200
Insurance Construction B 9/1/2019 400 450
Utilities Construction B 9/1/2019 300 400
Legal HR A 9/1/2019 550 800
Other Expenses HR A 9/1/2019 100 50
我试过以下代码:
SELECT e.budgetaccount, e.department, e.entity, e.date, SUM(e.amount) AS Actual, b.amount
FROM expenses AS e
INNER JOIN (SELECT b.budgetaccount, b.department, b.entity, b.date, b.amount FROM budget AS b)
ON e.budgetaccount = b.budgetaccount
AND e.department = b.department
AND e.entity = b.entity
AND e.date = b.date
GROUP BY e.budgetaccount, e.department, e.entity, e.date
。 . .这是我在尝试 运行 Tableau 中的查询时遇到的错误:
Error Message
我确信我在上面尝试做的很糟糕的编码中有很多错误,但是非常感谢任何帮助我指出正确方向的帮助。
我相信您的查询已经很接近了。似乎不需要 sub select,需要添加额外的 SUM
SELECT e.budgetaccount, e.department, e.entity, e.date, SUM(e.amount) AS Actual, SUM(b.amount) as budget
FROM expenses AS e
JOIN budget AS b
ON e.budgetaccount = b.budgetaccount
AND e.department = b.department
AND e.entity = b.entity
AND e.date = b.date
GROUP BY e.budgetaccount, e.department, e.entity, e.date
我想您可能遇到的唯一错误是 not a group by etc.
,因为行数与 budgetamount 行不匹配,您应该设置预算金额的最大值。事实上,内部联接会将第二条 table 记录作为输出,但事实是列数量和预算数量列的记录数量不同,因此数据要么冗余,要么更多,具体取决于哪个 table 列有更多记录因此所有第一个 table 记录是内部连接的实际 o/p 并且在其上放置一个组将通过总和聚合减少实际数量行但保持 table 预算金额列记录尽可能多,因为没有聚合等。虽然 table 预算帐户在第一个 table 中每个唯一行只有 1 个预算金额,但这并不意味着在最坏的情况下不能有多个,所以分组期望在 budgetamount 列上进行汇总以保持数据一致
Select... max(b.amount)..
Rest the same query
发现两个问题
1) table 名称别名 b
的错误位置2 ) 您需要所有不在聚合函数中的列 mentione din group by
SELECT e.budgetaccount, e.department, e.entity, e.date, SUM(e.amount) AS Actual, b.amount
FROM expenses AS e
LEFT JOIN (
SELECT budgetaccount
, department
, entity
, date
, amount
FROM budget
) b ON e.budgetaccount = b.budgetaccount
AND e.department = b.department
AND e.entity = b.entity
AND e.date = b.date
GROUP BY e.budgetaccount, e.department, e.entity, e.date, b.amount
无论如何你可以避免预算子查询 table ..
SELECT e.budgetaccount, e.department, e.entity, e.date, SUM(e.amount) AS Actual, b.amount
FROM expenses AS e
LEFT JOIN budget b ON e.budgetaccount = b.budgetaccount
AND e.department = b.department
AND e.entity = b.entity
AND e.date = b.date
GROUP BY e.budgetaccount, e.department, e.entity, e.date, b.amount