如果你在某些特殊商业问题上有一点创造性思维的话,你就会经常在SQL中设计解决方案。例如,公司为了使索要的费用和支付的费用一致,他们可以在下面两个方法中间选择一个。
|
|
|||
第二种方法(加拿大着名的Statement)意味着你需要计算所有索要费用的总和与所有支付的总和,然后再将它们进行匹配,当它们不平衡的时候报告它们的区别。第二种方法比较简单,所以我在这里就不举例说明了。这里,我们主要讨论第一种方法。
Open Item方法依据两个假设:认为支付的数目与索要的数目精确匹配,同时认为顾客会在账单上写明索要费用。两个假设都是不可靠的。这将导致职员要对这些不可靠所引起的误差而负责。你可以使用SQL程序来大大减少这种繁杂的工作。
下面这段代码创建了一个计划和两张表。你需要先创建一个测试数据库,然后再运行下面这段SQL语句:
|
现在,将下面这些数据插入到表中,以确保你有多种支付——一些与索要数目精确匹配,一些与索要数目比较接近,还有一些稍微与索要数目有点不同。
|
我们首先要做的事情就是定义要调用的门限值(例如,在我推断支付数目与索要数目的关系之前,必须知道支付数目和索要数目有多接近)。在下面的例子中,我定义门限值为2(在真实的例子中,门限值可以根据实际的环境来设置)。
因为支付的数目可能多,也可能少,还可能与索要的数目一样,为了将支付与索要进行匹配,我必须在某个范围内上下查找索要的数目。你可以使用BETWEEN语句,但是我在这里使用了Abs()函数。这个函数可以更清楚的表达我们感兴趣的值的范围。
|
在你运行代码之前,你可以先预测一下结果,然后再运行代码,看看你预测的是否正确。
它的结果如下所示:
|
虽然这个解决方法是正确的,但是它的应用范围并不是很广泛。这个例子正确的定义了三种情况:低于支付、正确的支付、多于支付。然而,这个方法除去了所有不能与支付匹配的索要,同时工作人员可能对各种情况都感兴趣。我能通过改变连接来得到不同的结果(参考Listing A)。下面就是这个过程的运行结果:
Charge#ChargePayment#Payment |
现在,工作人员就知道有三个索要与支付不匹配了。
如果对于同一个产品,顾客进行了两次错误的支付,且支付的数目一样的话,你应该如何得到这个信息呢?举个例子来说,你可以在Payments表中增加一条数目为00的记录,这时候Payments表中就有两条相同的记录了,然后再重新运行一下最后的查询代码。下面就是它的结果集:
Charge#ChargePayment#Payment |
这个结果集显示了一个解决隐藏问题的方法。我可以从这个结果中看出索要数目为6的记录被支付了两次。
进入讨论组讨论。·如何在SQL中解决松散关系 (0次浏览)
·如何对SQL Server数据表和数据库进行迭代操作 (0次浏览)
·SQL Server开发者Oracle快速入门 (0次浏览)
·利用标准SQL语句实现查询记录分页 (0次浏览)
·精细分析SQL server服务器的内存配置 (0次浏览)
·利用标准SQL语句实现查询记录分页 (0次浏览)
·精细分析SQL server服务器的内存配置 (0次浏览)
·轻松维护SQL Server 2005数据库 (0次浏览)
·数据库性能之数据库集群概念 (0次浏览)
·SQL Server根据访问历史日志自动分析并提供优 (0次浏览)
·数据库的安全性和异构数据库间的互操作 (0次浏览)
·如何优化数据库的数据查询 (0次浏览)
·如何应用SQL Server DBCC避免堵塞 (0次浏览)
·SQL Server 查询分析器快捷键集合 (0次浏览)
·SQL Server如何访问sybase数据库的表 (263次浏览)
·MS-SQL开发常用汇总和t-sql技巧集锦 (174次浏览)
·快速清除SQLServer日志的两种方法 (151次浏览)
·解析SQL Server数据在不同数据库中的应用 (46次浏览)
·教你如何在SQL Server计算列和平均值 (38次浏览)
·SQL Server 2005 - 实作CLR存储过程 (35次浏览)
·如何优化数据库的数据查询 (0次浏览)
·如何应用SQL Server DBCC避免堵塞 (0次浏览)
·SQL Server 查询分析器快捷键集合 (0次浏览)
·如何在SQL中解决松散关系 06-30
·如何对SQL Server数据表和数据库进行迭代操作 06-30
·SQL Server开发者Oracle快速入门 06-27
·利用标准SQL语句实现查询记录分页 06-27
·精细分析SQL server服务器的内存配置 06-20
·轻松维护SQL Server 2005数据库 06-15
·数据库性能之数据库集群概念 06-15
·SQL Server根据访问历史日志自动分析并提供优化策 06-15
·数据库的安全性和异构数据库间的互操作 06-15
|
|||
| ·ACDSEE专题教程-下载使用 ·迅雷专题教程-下载使用 ·Windows XP频道 ·Windows Vista频道 ·Windows 2000频道 ·win2003频道 ·Freebsd频道 ·Oracle频道 |
·Linux频道 ·Windows频道 ·邮件服务器专题 ·协议大全 ·数据恢复指南教程 ·FreeBSD使用教程 ·Linux数据库宝典 ·Linux基础知识 |
||
| · 秘密:Vista隐蔽的动态屏保 · 腾讯开发新电子宠物--QQ熊 · 惠普否认2999元PC有价无货 |
· 驱逐Win系统“流氓”文件 · WinXP中获取未使用的IP地址 · 尝试format C:格式化硬盘? |
| · 在DOS下恢复回收站中的文件 · 拯救WinXP崩溃的救命稻草 · Linux系统中超级权限的应用 |
· 搜狗PK谷歌:谁能代言拼... · 昨日重现,一键GHOST轻松.. · 实现Web迅雷在空闲时杀毒 |
| · AVIFile函数制做AVI文件 · VC中链接动态链接库的方法 · 熊猫烧香核心源码(Delphi) |
· DateDiff函数祥解 · JavaScript去除空格的三种 · js效果 图片加载进度实时.. |
| · SQL Server数据库优化方案 · Oracle的初学者入门心得 · JSP连接Mysql数据库 |
· Photoshop为美女做艺术处理 · 用Freehand创建发光字特效 · 设计自己的个性QQ动态表情 |




