合计一个 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