【问题标题】:How to add two tables having sum of amounts on the basis of year in SQL(toad)? [closed]如何在 SQL(toad) 中添加两个基于年份的金额总和的表? [关闭]
【发布时间】:2020-07-12 09:17:23
【问题描述】:

第一个表:

SELECT A.BU,A.PROJECT,SUM(A.BUDGET_AMOUNT),SUBSTR(A.BUDGET_PERIOD,3,2)
FROM BUDGET_SUMMARY A
GROUP BY A.BU,A.PROJECT,SUBSTR(A.BUDGET_PERIOD,3,2)

还有第二张桌子:

SELECT B.BU,A.PROJECT,SUM(B.ACTUAL_AMOUNT),SUBSTR(B.ACTUAL_PERIOD,3,2)
FROM ACTUAL_SUMMARY B
GROUP BY B.BU,B.PROJECT,SUBSTR(B.ACTUAL_PERIOD,3,2)

现在,我想将上面提到的两个表以

的形式加入到一个表中
BU|PROJECT|SUM(BUDGET_AMOUNT)|SUBSTR(A.BUDGET_PERIOD,3,2)|SUM(B.ACTUAL_AMOUNT)|SUBSTR(B.ACTUAL_PERIOD,3,2)

【问题讨论】:

  • 请在发帖前查看编辑框下方帖子的格式化版本。阅读代码和引用的编辑帮助重新内联和块格式。请在代码问题中给出minimal reproducible example--cut & paste & runnable code,包括最小的代表性示例输入为代码;期望和实际输出(包括逐字错误消息);标签和版本;明确的规范和解释。对于包含 DBMS 和 DDL(包括约束和索引)和输入为格式化为表的代码的 SQL。 How to Ask 输出表使用代码格式。
  • 您在这 2 个子选择上的预期连接列到底是什么? a.PROJECT=b.PROJECT?
  • 很抱歉没有正确定义我的问题,下次请记住仔细发布,是的,我打算加入两个表格和两列实际金额和预算金额列都应该在一个表格中.我得到了答案谢谢你
  • 请参阅How do comment @replies work? 以学习使用@x 通知一位非唯一非发布者评论者x 重新发表评论。请通过编辑而不是 cmets 进行澄清。请考虑编辑您的帖子以改进它。 Posets 通常永远在这里为他人提供帮助,并且即使被删除,接收不佳的帖子也会被计入发布禁令。 How to Askhelp center

标签: mysql sql database join toad


【解决方案1】:
SELECT A.BU,A.PROJECT, SUM(A.BUDGET_AMOUNT), SUBSTR(A.BUDGET_PERIOD,3,2), SUM(B.ACTUAL_AMOUNT)
FROM BUDGET_SUMMARY A
GROUP BY A.BU,A.PROJECT,SUBSTR(A.BUDGET_PERIOD,3,2)

或者两个表的值不一样可以使用JOIN(内连接用于匹配值)

    SELECT A.BU,A.PROJECT,SUM(A.BUDGET_AMOUNT),SUBSTR(A.BUDGET_PERIOD,3,2), T.SUM_BUDGET_AMOUNT, T.SUB_ACTUAL_PERIOD
    FROM BUDGET_SUMMARY A
    INNER JOIN  (
        SELECT B.BU,A.PROJECT,SUM(B.ACTUAL_AMOUNT) sum_BUDGET_AMOUNT,SUBSTR(B.ACTUAL_PERIOD,3,2) SUB_ACTUAL_PERIOD
        FROM ACTUAL_SUMMARY B
        GROUP BY B.BU,B.PROJECT,SUBSTR(B.ACTUAL_PERIOD,3,2)
        ) T  ON T.BU = A.BY 
            AND T.PROJECT = A.PROJECT,SUBSTR(A.BUDGET_PERIOD,3,2)
                AND T.SUB_ACTUAL_PERIOD = ,SUBSTR(A.BUDGET_PERIOD,3,2)
    GROUP BY A.BU,A.PROJECT,SUBSTR(A.BUDGET_PERIOD,3,2)

如果您有 aprtila 匹配,请离开加入

    SELECT A.BU,A.PROJECT,SUM(A.BUDGET_AMOUNT),SUBSTR(A.BUDGET_PERIOD,3,2), T.SUM_BUDGET_AMOUNT, T.SUB_ACTUAL_PERIOD
    FROM BUDGET_SUMMARY A
    LEFT  JOIN  (
        SELECT B.BU,A.PROJECT,SUM(B.ACTUAL_AMOUNT) sum_BUDGET_AMOUNT,SUBSTR(B.ACTUAL_PERIOD,3,2) SUB_ACTUAL_PERIOD
        FROM ACTUAL_SUMMARY B
        GROUP BY B.BU,B.PROJECT,SUBSTR(B.ACTUAL_PERIOD,3,2)
        ) T  ON T.BU = A.BY 
            AND T.PROJECT = A.PROJECT,SUBSTR(A.BUDGET_PERIOD,3,2)
                AND T.SUB_ACTUAL_PERIOD = ,SUBSTR(A.BUDGET_PERIOD,3,2)
    GROUP BY A.BU,A.PROJECT,SUBSTR(A.BUDGET_PERIOD,3,2)

【讨论】:

  • 是的,我需要部分匹配..left join 成功了,谢谢
【解决方案2】:

只是猜测,您的描述难以阅读且无法执行。命名子查询应该有助于获得您想要的结果(假设“项目”可以用作连接列)

with budget as
(
SELECT A.BU,A.PROJECT,SUM(A.BUDGET_AMOUNT) sum_amount,SUBSTR(A.BUDGET_PERIOD,3,2) m_period FROM BUDGET_SUMMARY A GROUP BY A.BU,A.PROJECT,SUBSTR(A.BUDGET_PERIOD,3,2)
), actual as
(
SELECT B.BU,B.PROJECT,SUM(B.ACTUAL_AMOUNT) sum_amount,SUBSTR(B.ACTUAL_PERIOD,3,2) m_period FROM ACTUAL_SUMMARY B GROUP BY B.BU,B.PROJECT,SUBSTR(B.ACTUAL_PERIOD,3,2)
)

select  budget.BU,budget.PROJECT,budget.sum_amount,budget.m_period,actual.sum_amount,actual.m_period
from budget
join actual on budget.project=actual.project

(可能需要左连接)

【讨论】:

  • 请不要在回答帖子中猜测,这会造成混乱,请通过评论问题和标记来要求澄清,或因不清楚而关闭投票。
  • 感谢 Michael 提供的扩展帮助,很抱歉没有解决我的问题,因为这是我的第一个问题,并且忙于处理问题,是的,离开加入工作,您的回答帮助了谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-13
  • 2018-10-18
  • 2018-06-24
  • 2020-11-17
  • 1970-01-01
  • 1970-01-01
  • 2013-07-02
相关资源
最近更新 更多