【问题标题】:mysql query: show summary of all payments made and total of invoices by datemysql查询:按日期显示所有付款的摘要和发票总数
【发布时间】:2010-11-19 20:05:56
【问题描述】:

我想要这样的结果

来自这些表格。

我什至不知道如何用 php 来做。我什至试图在日期加入付款和发票表,但徒劳无功。

这是一个采购系统,此查询将按日期显示所有付款的摘要和发票总额。

我想到了一个解决方案,首先从发票中选择所有日期,然后从付款中选择所有日期并进行合并。然后检查该日期是否有发票,然后检查该日期是否有付款。但是这样会查询太多。

【问题讨论】:

  • 更多信息会有所帮助。这没有显示表格之间有什么限制以及发票总额和付款所代表的内容(它们是按 companyId 还是没有?)
  • 我已经添加了mysql文件。希望对您有所帮助。
  • 太棒了。以及下面的答案,它们没有帮助吗?

标签: sql mysql


【解决方案1】:
select
  x.date,
  sum(x.invoiceTotal) as invoiceTotal,
  sum(x.paymentsMade) as paymentMade
from
 (select
   i.date, 
   sum(i.rate * i.quantity /*?*/) as invoiceTotal,
   null as paymentMade    
 from
   invoice i
   inner join invoiceitem ii on ii.invoiceId = i.invoiceId
 group by
   i.date
 union all
 select
   p.date,
   null as invoiceTotal,
   sum(p.amount) as paymentMade    
 from
   payment p
 group by
   p.date) x
group by
  x.date
order by
  x.date

【讨论】:

  • 如果你真的想输出破折号,你可以使用 ifnull(sum(x.invoiceTotal), '-')。
  • [Err] 1054 - '字段列表'中的未知列 'i.rate'
  • 我接受这个解决方案,虽然它给出了一些错误,但我已经使用您的查询进行了另一个查询。我也将分享该查询。希望您可以为其他用户更正此答案。
  • 是的,我应该使用 ii.rate 和 ii.quantity。
【解决方案2】:

您需要查看您的联接。看看这个网站:

http://www.wellho.net/solutions/mysql-mysql-joins-using-left-join-and-right-join-to-find-orphan-rows.html

我相信你也应该看看这里,因为你希望连接同时发生:

http://www.xaprb.com/blog/2006/05/26/how-to-write-full-outer-join-in-mysql/

酌情使用您的聚合。

【讨论】:

    【解决方案3】:
        select
      x.date,
      sum(x.invoiceTotal) as invoiceTotal,
      sum(x.paymentMade) as paymentMade
    from
    (SELECT
    Sum((invoiceitem.rate * invoiceitem.quantity)) AS invoiceTotal,
    invoice.`date`,
    null AS paymentMade
    FROM
          invoice
          Left Join invoiceitem ON invoice.invoiceId = invoiceitem.invoiceId
    where companyId='6'
    GROUP BY
          invoice.`date`
    UNION ALL
    SELECT
    null as invoiceTotal,
      payment.date,
      sum(payment.amount) as paymentMade    
     from
      payment
     group by
      payment.date) x
    group by
      x.date
    order by
      x.date
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-23
      • 1970-01-01
      • 1970-01-01
      • 2013-07-25
      • 2014-04-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多