科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道教你快速掌握如何在 SQL中解决松散关系

教你快速掌握如何在 SQL中解决松散关系

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

如果你在某些特殊商业问题上有一点创造性思维的话,你就会经常在SQL中设计解决方案。例如,公司为了使索要的费用和支付的费用一致,他们可以在本文两个方法中间选择一个。

作者:赛迪网 changelive 来源:天新网 2008年3月26日

关键字: 数据库 SQL Server Mssql SQL

  • 评论
  • 分享微博
  • 分享邮件

如果你在某些特殊商业问题上有一点创造性思维的话,你就会经常在SQL中设计解决方案。例如,公司为了使索要的费用和支付的费用一致,他们可以在下面两个方法中间选择一个。

第一种方法(加拿大著名的Open Item)意味着你将索要费用与支付费用进行精确的匹配,典型的做法是,将索要费用的数目放到支付表中进行比较。

第二种方法(加拿大著名的Statement)意味着你需要计算所有索要费用的总和与所有支付的总和,然后再将它们进行匹配,当它们不平衡的时候报告它们的区别。第二种方法比较简单,所以我在这里就不举例说明了。这里,我们主要讨论第一种方法。

Open Item方法依据两个假设:认为支付的数目与索要的数目精确匹配,同时认为顾客会在账单上写明索要费用。两个假设都是不可靠的。这将导致职员要对这些不可靠所引起的误差而负责。你可以使用SQL程序来大大减少这种繁杂的工作。

下面这段代码创建了一个计划和两张表。你需要先创建一个测试数据库,然后再运行下面这段SQL语句:

Create Schema Loose 
GO 
CREATE TABLE [Loose].[Charges]( 
[PK] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY, 
[Amount] [money] NOT NULL 
)ON [PRIMARY] 
GO 
CREATE TABLE [Loose].[Payments]
( [PK] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY, 
[Amount] [money] NOT NULL )
ON [PRIMARY] 
GO

现在,将下面这些数据插入到表中,以确保你有多种支付——一些与索要数目精确匹配,一些与索要数目比较接近,还有一些稍微与索要数目有点不同。

INSERT INTO Loose.Charges VALUES (100) 
INSERT INTO Loose.Charges VALUES (12) 
INSERT INTO Loose.Charges VALUES (56) 
INSERT INTO Loose.Charges VALUES (43) 
INSERT INTO Loose.Charges VALUES (59) 
INSERT INTO Loose.Charges VALUES (998) 
GO 
INSERT INTO Loose.Payments VALUES (99) 
INSERT INTO Loose.Payments VALUES (62) 
INSERT INTO Loose.Payments VALUES (40) 
INSERT INTO Loose.Payments VALUES (50) 
INSERT INTO Loose.Payments VALUES (12) 
INSERT INTO Loose.Payments VALUES (1000) 
GO

我们首先要做的事情就是定义要调用的门限值(例如,在我推断支付数目与索要数目的关系之前,必须知道支付数目和索要数目有多接近)。在下面的例子中,我定义门限值为2(在真实的例子中,门限值可以根据实际的环境来设置)。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章