一个表中的金额总和,而另一表中的总金额

时间:2019-10-30 18:21:11

标签: sql tableau

我在这里并不是最精通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

我敢肯定,我在上面尝试做得很差的编码中有很多错误,但是对我指出正确方向的任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:0)

我想您可能会遇到的唯一错误是not a group by etc.,因为没有行与预算金额行不匹配,因此应在预算金额上添加一个最大值。实际上,内部联接会将第二个表记录作为输出,但事实是,列数和预算额列中没有记录是不同的,因此数据将是冗余的还是更多,具体取决于哪个表列具有更多的记录,因此所有第一个表记录是内部联接的实际o / p,在其上放一个group by将通过合计聚合减少实际数量的行,但是将表预算金额列的记录保持为没有聚合等的更多。尽管表预算帐户只有1个第一个表中每个唯一行的预算金额,但这并不意味着在最坏的情况下不能有多个,因此group by期望budgetamount列上的汇总也可以保持数据一致

   Select... max(b.amount)..
   Rest the same query

答案 1 :(得分:0)

发现了两个问题

1)表名别名b的位置错误

2)您需要的列不在聚合函数中

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

无论如何,您可以避免对预算表进行子查询。

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

答案 2 :(得分:-1)

我相信您已经关闭查询。似乎不需要子选择,也不需要添加其他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
相关问题