如何按名义账户和月份对交易数据进行汇总

时间:2016-02-08 15:19:54

标签: mysql date group-by sum

几乎是sql的新手,试图找到我的方法 - 我有一张来自我们的会计软件的交易数据表,显示日期(dd-mm-yyyy格式),名义账户和每笔交易的金额。我希望有一个输出表,用于汇总每个月内每个名义账户的过账金额。年。

我目前的数据表:

Date--Nominal_Code--Amount
01/01/2015--1000-£10
03/01/2015--1000-£20
15/01/2015--2000-£50
20/01/2015--2000-£10
01/02/2015--1000-£20
15/02/2015--1000-£30
20/02/2015--1000--£15

我想要的输出:

Month--Year--Nominal_Code--Amount
Jan--2015--1000--£30
Jan--2015--2000--£60
Feb--2015--1000--£65

当然这很简单,但是无法得到它!

任何和所有帮助表示赞赏!谢谢!

到目前为止,感谢所有的帮助,但我仍然无法让它工作。也许我需要提供更多信息(作为一个新手)可能是我做了一些荒谬的事情,这意味着它永远不会工作。所以,我使用Microsoft Query通过ODBC链接访问表。该表名为AUDIT_JOURNAL。

我导入表并选择在MS Query中查看。然后我查看View SQL选项。内容如下:

SELECT AUDIT_JOURNAL.DATE,  
AUDIT_JOURNAL.NOMINAL_CODE,  
AUDIT_JOURNAL.AMOUNT,  
AUDIT_JOURNAL.FOREIGN_AMOUNT  
FROM AUDIT_JOURNAL AUDIT_JOURNAL  
WHERE (AUDIT_JOURNAL.DATE>={d '2015-02-01'})  

它返回一个包含上面列出的4列的交易表。

我正在尝试将这些缩小为汇总表,显示每个月,年和NOMINAL_CODE组合的一条记录。

我的第一个问题是我没有月份或年份字段,只有DATE字段,格式为yyyy-mm-dd。

尝试在DATE列上使用DATEPART(),YEAR()或MONTH()表达式时,我反复收到错误,指出找不到列。

当我执行以下操作时会发生这种情况,例如:

SELECT YEAR(AUDIT_JOURNAL.DATE) AS Year,  
AUDIT_JOURNAL.NOMINAL_CODE,  
AUDIT_JOURNAL.AMOUNT,  
AUDIT_JOURNAL.FOREIGN_AMOUNT  
FROM AUDIT_JOURNAL AUDIT_JOURNAL  
WHERE (AUDIT_JOURNAL.DATE>={d '2015-02-01'})

2 个答案:

答案 0 :(得分:1)

您的查询需要这些功能。

除此之外,你需要GROUP BY来总结一切。确保你习惯这样做;它是一项至关重要的SQL技能。

这是查询的第一个镜头:

SELECT
  MONTHNAME(`Date`) AS The_Month,
  YEAR(`Date`) AS The_Year,
  Nominal_Code,
  SUM(Amount) AS Total_Amount
FROM MyTable
GROUP BY
  MONTHNAME(`Date`),
  YEAR(`Date`),
  Nominal_Code
ORDER BY
  The_Year,
  The_Month,
  Nominal_Code

除了通知February之前结果中January的通知时,我们会给出结果。这是因为它按月名称进行排序。您希望按月 number 订购,这是MySQL MONTH功能。要将月份编号作为查询的一部分,您还需要GROUP BY

SELECT
  MONTH(`Date`) AS Month_Number,
  MONTHNAME(`Date`) AS The_Month,
  YEAR(`Date`) AS The_Year,
  Nominal_Code,
  SUM(Amount) AS Total_Amount
FROM MyTable
GROUP BY
  MONTH(`Date`),
  MONTHNAME(`Date`),
  YEAR(`Date`),
  Nominal_Code
ORDER BY
  The_Year,
  Month_Number,
  Nominal_Code

答案 1 :(得分:0)

本月你可以尝试这个选择

select  date_format(month(STR_TO_DATE(date, '%m/%d/%Y'), '%m %Y') as month, nominal_code, sum(Amount)
from my_table
group by month