案例分析:看似简单的查询
2008-04-02 10:32:03来源:互联网 阅读 ()
日前,在浏览CSDN数据库技术论坛的时候,发现了一个帖子,帖子中的提问者需要一条SQL查询语句,但是不要存储过程 函数 游标,因为要在Access里面执行,当天就有高手回复了,并且提问者也已调通了,帖子就此也结了。那么是不是问题真的解决了呢?
原始帖子:http://community.csdn.net/Expert/topic/4613/4613168.xml?temp=.8729975
问题: 各位大虾: 表: 索引 凭证编码 金额 摘要 日期 cnsy pzbm pzje cnzy cnrq 1 101 100.00 2 102 100.00 3 202 200.00 4 203 100.00 得到结果 谢谢! 不要存储过程 函数 游标,因为要在Access里面执行 |
网友libin_ftsafe(子陌红尘)给出的回复:
ACCESS里用这条语句: ------------------------------------------------------ select a.cnsy as 索引, a.pzbm as 凭证编码, 0 as 期出余额, a.pzje as 金额, a.pzje as 期末金额, a.cnzy as 摘要 from t a where not exists(select 1 from t where cnsy<a.cnsy) union all select a.cnsy as 索引, a.pzbm as 凭证编码, sum(b.pzje) as 期出余额, a.pzje as 金额, sum(b.pzje) a.pzje as 期末金额, a.cnzy as 摘要 from t a,t b where a.cnsy>b.cnsy group by a.cnsy,a.pzbm,a.pzje,a.cnzy |
一道问题就词是否真的结束了呢?随后提问者在使用的过程中发现了一个新问题:当删除中间日期的时候,再插入新的旧日期数据,按照日期排序,数值就不正确了!原因是提问者的需求中,排序以日期时间为准,不已索引为准,因为当某个凭证作废后,重新生成的数据就排到后面去了,这样计算出的期初数就不正确了!所以,有时候我们很多的问题看似第一时间解决了,但解决方法只针对这件事有效,而缺乏对通用算法和语句的提炼和总结。将需求的共性总结融汇到解决方案中去,形成“案例”,这也是数据库从业人员必不可少的一项技能。
以下是网友libin_ftsafe(子陌红尘)根据提问者发现的问题重新写出的语句。这个问题是否到此结束了呢?我想,还远没结束呢!
select a.cnsy as 索引, a.pzbm as 凭证编码, 0 as 期出余额, a.pzje as 金额, a.pzje as 期末金额, a.cnzy as 摘要 from t a where not exists(select 1 from t where cnrq<a.cnrq) and not exists(select 1 from t where cnrq=a.cnrq and cnsy<a.cnsy) union all select a.cnsy as 索引, a.pzbm as 凭证编码, sum(b.pzje) as 期出余额, a.pzje as 金额, sum(b.pzje) a.pzje as 期末金额, a.cnzy as 摘要 from t a,t b where a.cnrq>b.cnrq or (a.cnrq=b.cnrq and a.cnsy>b.cnsy) group by a.cnsy,a.pzbm,a.pzje,a.cnzy |
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇: 数据库人员手边系列:SQL Server疑难排除步骤
下一篇: 日志恢复数据到时间点(总结)
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash