【问题标题】:Profit/Loss from Income and Expenditure Tables收入和支出表的损益
【发布时间】:2021-10-26 18:52:56
【问题描述】:

我有 2 个收入和支出表,每个表都有日期和货币字段。收入:IncomeDate、AmountPaid;支出:ExpenseDate、TotalAmount。我想编写一个 SQL 查询来从收入中减去支出,以获得两个表中不同日期的损益字段。 我试过了:

SELECT 
  Income.IncomeDate, 
  SUM(AmountPaid) AS DailyIncome, 
  Expenditure.ExpenseDate, 
  SUM(TotalAmount) AS DailyExpenditure 
FROM Income
  FULL OUTER JOIN Expenditure ON IncomeDate=ExpenditureDate
GROUP BY IncomeDate 
ORDER BY IncomeDate

...但它不起作用。有什么想法吗?

【问题讨论】:

    标签: sql ms-access


    【解决方案1】:

    您遇到的问题是,当您在该日期加入时,您实际上是在复制您拥有的记录数。所以你真的有两个选择。

    1. 将总和除以您要提取的聚合因子。这是一个肮脏的解决方案,但它有效。
    select i.incomedate, sum(i.amountpaid) /2 as dailyincome, sum(e.totalamount) /2 as dailyexpenditure
    from income i 
    join expense e on e.expensedate= i.incomedate
    group by e.expensedate, i.incomedate
    
    1. 更好的方法是通过 cte 分别执行这些查询,然后将它们混合到一个结果集中。这可能是过度设计,但它比将结果除以 2 更容易。它也应该比连接更高效。

    我的格式可能是错误的,我无法直接访问我面前的SQL,但这是一般流程。

    with inc as (
    select incomedate as idate, sum(amountpaid) as dailyincome
    from income
    group by amountpaid
    ),
    
    exp as (
    select expensedate as edate, sum(totalamount) as dailyexpenditure
    from expenditure
    )
    
    select idate, dailyincome, dailyexpenditure
    from inc join exp on edate = idate
    

    【讨论】:

      猜你喜欢
      • 2018-09-07
      • 1970-01-01
      • 2012-08-15
      • 1970-01-01
      • 1970-01-01
      • 2013-07-03
      • 2020-08-04
      • 2014-03-21
      • 2023-01-11
      相关资源
      最近更新 更多