Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

[5分]按照时间累计查询收入

穆易  发表于:2020-05-15 15:26:12  
复制

请问,有收入和实现日期两栏,可以通过查询实现增加逐月的收入累计值,和日期的标注吗,求代码?

1.原数据库 

业务 收入 实现日期
零售 2000 2019-1-21
零售 2000 2019-2-21
零售 2000 2019-3-21
零售 2000 2019-4-21
零售 2000 2019-5-21
零售 2000 2019-6-21
零售 2000 2019-7-21
零售 2000 2019-8-21
零售 2000 2019-9-21
零售 2000 2019-10-21
零售 2000 2019-11-21
零售 2000 2019-12-21
批发 2000 2020-1-21
批发 2000 2020-2-21
批发 2000 2020-3-21
批发 2000 2020-4-21

2.预计实现的查询 

业务 收入 实现日期 收入累计值 报表日期
零售 2000 2019-1-21 2000 2019年1月
零售 2000 2019-2-21 4000 2019年2月
零售 2000 2019-3-21 6000 2019年3月
零售 2000 2019-4-21 8000 2019年4月
零售 2000 2019-5-21 10000 2019年5月
零售 2000 2019-6-21 12000 2019年6月
零售 2000 2019-7-21 14000 2019年7月
零售 2000 2019-8-21 16000 2019年8月
零售 2000 2019-9-21 18000 2019年9月
零售 2000 2019-10-21 20000 2019年10月
零售 2000 2019-11-21 22000 2019年11月
零售 2000 2019-12-21 24000 2019年12月
批发 2000 2020-1-21 2000 2020年1月
批发 2000 2020-2-21 4000 2020年2月
批发 2000 2020-3-21 6000 2020年3月
批发 2000 2020-4-21 8000 2020年4月

 

 

Top
leoyoung 发表于:2020-05-16 08:03:06
穆易 发表于:2020-05-16 21:50:11

您好,示例非常好,但是我将查询语句应用新建的查询文件时,总是提示“表达式中CumulativeAmount函数未定义”,请问这是什么原因呢,看您示例文件有模块,和这个模块文件有关系吗?





leoyoung 发表于:2020-05-17 08:38:52
是的,你必须把模块中的代码复制到你自己的数据库中,若表名、字段名等有不一样的话都需作相应的调整。

穆易 发表于:2020-05-18 15:51:57

您好,我参考建立新的查询后出现余额列错误,查询代码如下,请问可能是哪里有问题呢,这个查询文件时在盟威 Access 快速开发平台创建的

 

查询文件代码如下:

SELECT 历年税收明细查询.纳税人名称, 历年税收明细查询.增值税, 历年税收明细查询.月份, CumulativeAmount([纳税人名称],[月份]) AS 余额, Format([月份],"yyyy\年m\月") AS 日期
FROM 历年税收明细查询
ORDER BY 历年税收明细查询.纳税人名称, 历年税收明细查询.月份;

 

建立的查询文件运行如下:

 

建立的模块代码如下:

Option Compare Database

'函数用途: 求累计结余金额

'输入参数: ID      对应查询中当前行ID字段的值
'           strGroup 对应查询中当前行分组的值
'           CumulativeAmount 对应查询中的当前行结余金额的值
'使用注意: 必须以ID字段排升序,否则会出错

 Function CumulativeAmount(ByVal strGroup As String, ID As Long) As Double
'求余额的函数
    Dim Rs As Recordset
    Dim y As Double
    Dim strSQL As String
    Set Rs = New ADODB.Recordset
    Rs.ActiveConnection = CurrentProject.Connection
    strSQL = "Select * FROM 历年税收明细查询 Where 纳税人名称='" & strGroup & "' ORDER BY 纳税人名称,月份"
    Rs.Open strSQL, , adOpenKeyset, adLockOptimistic
    Rs.MoveFirst
    Do Until Rs.EOF
        If ID = Rs!月份 Then
            y = y + Nz(Rs!增值税)
            CumulativeAmount = y
            Exit Do
        ElseIf ID <> Rs!月份 Then
            y = y + Nz(Rs!增值税)
        End If
        Rs.MoveNext
    Loop
    Rs.Close
    Set Rs = Nothing
End Function

 



cheng_access 发表于:2020-05-18 16:53:21

能上传accdb文件吗?显示余额有多种方法,而且是很容易实现.




cheng_access 发表于:2020-05-18 21:01:01
Function CumulativeAmount(ByVal strGroup As String, ID As Long) As Double 改成:Function CumulativeAmount(ByVal strGroup As String, ID As String) As Double

穆易 发表于:2020-05-18 21:27:53


穆易 发表于:2020-05-18 21:30:09


穆易 发表于:2020-05-18 21:30:33


明细

识别号 名称 增值税 所得税 日期
111111111 轻工 2000 1000 2019/1/31
111111111 轻工 2000 1000 2019/2/28
111111111 轻工 2000 1000 2019/3/31
111111111 轻工 2000 1000 2019/4/28
111111111 轻工 2000 1000 2019/5/31
222222222 物资 2000 1000 2019/6/28
222222222 物资 2000 1000 2019/7/31
222222222 物资 2000 1000 2019/8/27
333333333 物资 2000 1000 2020/1/31
333333333 物资 2000 1000 2020/2/25
333333333 物资 2000 1000 2020/3/31



穆易 发表于:2020-05-18 21:30:48
识别号 名称 增值税 所得税 日期 增值税累计 所得税累计 报表日期
111111111 轻工 2000 1000 2019/1/31 2000 1000 2019年1月
111111111 轻工 2000 1000 2019/2/28 4000 2000 2019年2月
111111111 轻工 2000 1000 2019/3/31 6000 3000 2019年3月
111111111 轻工 2000 1000 2019/4/28 8000 4000 2019年4月
111111111 轻工 2000 1000 2019/5/31 10000 5000 2019年5月
222222222 物资 2000 1000 2019/6/28 12000 6000 2019年6月
222222222 物资 2000 1000 2019/7/31 14000 7000 2019年7月
222222222 物资 2000 1000 2019/8/27 16000 8000 2019年8月
333333333 物资 2000 1000 2020/1/31 2000 1000 2020年1月
333333333 物资 2000 1000 2020/2/25 4000 2000 2020年2月
333333333 物资 2000 1000 2020/3/31 6000 3000 2020年3月


穆易 发表于:2020-05-18 21:32:00
您好,发帖有限制,本来想照猫画虎不成,就是想在明细库的基础上,得到图二的效果,有没有简单查询的方法呢?

cheng_access 发表于:2020-05-19 11:40:07

你的表名是 明细

先建 明细查询1

 SELECT 明细.识别号, 明细.名称, 明细.增值税, 明细.所得税, 明细.日期, Format([日期],"yyyy\年m\月") AS 报表日期 FROM 明细 ORDER BY Format([日期],"yyyy\年m\月");

再建 明细查询2(也许是你希望的效果)

SELECT 明细查询1.识别号, 明细查询1.名称, 明细查询1.增值税, 明细查询1.所得税, 明细查询1.日期, DSum("[增值税]","[明细查询1]","(((明细查询1.报表日期)<='" & [报表日期] & "'))") AS 增值税累计, DSum("[所得税]","[明细查询1]","(((明细查询1.报表日期)<='" & [报表日期] & "'))") AS 所得税累计, 明细查询1.报表日期 FROM 明细查询1;



大洋 发表于:2020-05-20 21:06:57
你好,日期相同时好像累计计算结果不正确

leoyoung 发表于:2020-05-21 22:40:06
报表也可以实现累计,vba提供了更多应用的可能性。
点击下载此附件



总记录:14篇  页次:1/1 9 1 :