【问题标题】:MySQL Sum on matching set of data匹配数据集的 MySQL Sum
【发布时间】:2011-06-05 11:40:59
【问题描述】:

这是我在这个论坛的第一篇文章。我通常会在搜索时找到我的问题的答案,但这是我第一次需要发布这个问题。任何帮助将不胜感激。

我有一个名为“gjournal_main”的表

`dateinput` datetime NOT NULL COMMENT 'Input Date',
`datepaid` date NOT NULL COMMENT 'Date of Invoice',
`invoiceno` varchar(12) NOT NULL COMMENT 'Invoice #',
`bookno` varchar(12) NOT NULL,
PRIMARY KEY (`invoiceno`),
KEY `invoiceno` (`invoiceno`)

另一个带有交易细节“general_journal”(或项目)

`eid` int(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Entry ID',
`tid` varchar(12) NOT NULL COMMENT 'Transaction ID or Inv no',
`ref` varchar(15) NOT NULL COMMENT 'Reference no',
`notes` varchar(30) NOT NULL COMMENT 'Narations',
`accountname` varchar(50) NOT NULL COMMENT 'AC Title',
`debit` int(12) NOT NULL,
`credit` int(12) NOT NULL,
PRIMARY KEY (`eid`),
KEY `tid` (`tid`),
KEY `ref` (`ref`)

我想对“bookno”进行搜索,并列出所有具有匹配书号(例如 1254)的记录,几个 invoiceno 可以有一个 bookno。 我想要这样的结果....

------------------------------------------------------
inputdate   |invoiceno |bookno|accounttitle|debit|credit
------------------------------------------------------
2011-05-29  | 1        |1254  |item a      |12   |0
2011-05-29  | 1        |1254  |item b      |0    |3
2011-05-29  | 1        |1254  |item b      |1    |3
                             **TOTAL       |13   |6**
2010-01-06  | 2        |900   |item a      |10   |0
2010-01-06  | 2        |900   |item b      |50   |0
2010-01-06  | 2        |900   |item c      |10   |30
2010-01-06  | 2        |900   |item d      |10   |0
                             **TOTAL       |80   |30**

------------------------------------------------------

在列出发票编号 1 后,我想中断借方和贷方的总和,依此类推,我该怎么做?

非常感谢

【问题讨论】:

  • 看看 group by with rollup。

标签: mysql select sum


【解决方案1】:

使用 union 将总计一行添加到各个行:

select
    g.inputdate,
    g.invoiceno,
    g.bookno,
    j.accountname,
    j.debit,
    j.credit,
    1 as recordtype /*invoice line*/
from
    gjournal_main g
    inner join general_journal j on j.tid = g.invoiceno
union all
select
    null,
    null,
    g.invoiceno,
    '** Total',
    sum(j.debit),
    sum(j.credit),
    2 as recordtype /* total */
from
    gjournal_main g
    inner join general_journal j on j.tid = g.invoiceno
group by
    g.invoiceno
order by
    bookno,
    invoiceno,
    recordtype
having
    bookno = 600

【讨论】:

  • 非常感谢 Golez Trol。我已经尝试了该声明,但它没有给我想要的结果。它显示了符合“Bookno”条件的所有借方和贷方列的总和。
  • 非常感谢 Golez Trol。我已经尝试了该声明,但它没有给我想要的结果。它显示了符合“Bookno”标准的所有借方和贷方列的总数。我对mysql也不是很熟悉,所以请原谅我的愚蠢问题。为什么必须在列名之前加上i,j.g然后点?
  • 糟糕。我想我忘记了我现在在答案中添加的组。
  • g 和 j 是表的 别名。别名在表名之后指定。这样,您可以指定应从哪个表中获取字段,而无需指定整个表名。我认为一旦你习惯了它们,它就会为你的查询增加可读性。你可以只写debit,这会让你对使用的表犹豫不决(虽然MySQL通常会知道),或者你可以写general_journal.debit,我认为这太长了。 j.debit 感觉刚刚好。 ;-)
  • 我在尝试运行上述语句时收到以下消息“您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,以在 'have bookno = 600 附近使用正确的语法在第 30 行“
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-27
  • 2012-10-09
  • 2013-04-06
  • 1970-01-01
  • 2023-04-06
  • 2012-09-14
  • 1970-01-01
相关资源
最近更新 更多