Access交流中心

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

这个子查询该如何修改?

奇玉  发表于:2010-12-17 14:03:36  
复制

近日在本论坛上看到一篇文章很好,趣谈子查询,模仿去做,但遇到新问题,求高人解答:

 

个人往来明细账查询是个子查询:

SELECT a.个人名称, a.日期, a.挂支金额, a.报销金额, (select sum(b.挂支金额-b.报销金额) from query as b where b.个人名称=a.个人名称 and b.日期<=a.日期) AS 余额, a.摘要 FROM query AS a ORDER BY a.个人名称, a.日期;
 

但是如果同一个日期,即有挂支金额又有报销金额时,余额就错了,比如:6月13日两笔余额就是错的,该如何修改?(不同日期没有问题)

 

 

 

 

 

 

Top
奇玉 发表于:2010-12-18 08:52:11

忘了上传数据库,求高手解答,谢谢!

 

 

点击下载此附件

煮江品茶 发表于:2010-12-18 10:39:17
将日期精确到秒即可。

奇玉 发表于:2010-12-18 11:24:43
煮江老师:这样虽然可以实现,但是录入日期太麻烦了,而且日期字段显示也不好看,显示出来秒没什么实际意义,有没有其它的方法呢?

wang decheng 发表于:2010-12-18 12:00:48

此处你可以说他不对,也可以说他对。因为所谓余额是对应某一天的。

如果要对应每一笔账目,应该要有输入账目的id号.所以一般网上看到的例子都有id号。



痞兒 发表于:2010-12-18 16:27:48

显示用Format(a.日期,'yyyy-mm-dd') as [日期]

ORDER BY a.个人名称, a.日期

录入的时候,直接用DATA()不可以吗?

 

 

还有,这个查询作用是显示这个人一天的收支情况还有余额,那样摘要就没必要吧

日期格式不变

sum(b.挂支金额-b.报销金额)变成sum(b.挂支金额)-sum(b.报销金额)

 

这样算余额可以不?

 

 

 

 

 

 

 



痞兒 发表于:2010-12-18 16:34:33

SELECT a.个人名称, a.日期, sum(a.挂支金额) as 挂支金额, sum(a.报销金额) as 报销金额, (select sum(b.挂支金额)-sum(b.报销金额) from query as b where b.个人名称=a.个人名称 and b.日期<=a.日期) AS 余额
FROM query AS a
group by a.个人名称, a.日期;



奇玉 发表于:2010-12-20 09:21:48

感谢楼上朋友热心相助!但这样反应出来的是每日的总数,而不是每一笔,还是不太合适。每一笔挂支的用途都是不同的,要算出每一笔后的余额,不能合计。



煮江品茶 发表于:2010-12-20 12:36:43

 

select 编号,日期,个人名称,挂支金额,0 as 报销金额,摘要 from 挂支(借方)
UNION ALL select 编号,日期,个人名称,0 as 挂支金额,报销金额,摘要 from 报销(贷方)
ORDER BY 日期, 编号;

 


 

SELECT a.个人名称, a.日期, a.挂支金额, a.报销金额, (select sum(b.挂支金额-b.报销金额) from query as b where b.个人名称=a.个人名称 and Format(b.[日期],"yyyymmdd") & Format(b.[编号],"000000") <=Format(a.[日期],"yyyymmdd") & Format(a.[编号],"000000") ) AS 余额, a.摘要
FROM query AS a
ORDER BY a.个人名称, Format(a.日期,"yyyymmdd") & Format(a.编号,"000000");

 

点击下载此附件

 

 

 

 

 



煮江品茶 发表于:2010-12-20 12:53:18

如果想为查询加上一个ID,可以进一步写为:

SELECT a.个人名称, a.日期, a.挂支金额, a.报销金额, (select sum(b.挂支金额-b.报销金额) from query as b where b.个人名称=a.个人名称 and Format(b.[日期],"yyyymmdd") & Format(b.[编号],"000000") <=Format(a.[日期],"yyyymmdd") & Format(a.[编号],"000000") ) AS 余额, a.摘要, (select count(*) from query as b where Format(b.[日期],"yyyymmdd") & Format(b.[编号],"000000") <=Format(a.[日期],"yyyymmdd") & Format(a.[编号],"000000") ) AS ID
FROM query AS a
ORDER BY a.个人名称, Format(a.日期,"yyyymmdd") & Format(a.编号,"000000");



奇玉 发表于:2010-12-20 15:44:55

为查询加个ID是最好的,虽然看得有些头痛,但开拓了思路,学会了新方法.

 

 



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