如何使用数据库查询累计牛
有这样一个要求,它要创建一个SQL Server查询,其中包括基于事件时刻的累计值。典型的例子就是一个银行账户,因为你每一次都是在不同的时间去存钱和取钱。对任意一个账户来说,在某个时间点都要算出它的借(存款)和贷(取款)之和。每一笔交易之后,你都想知道当前的余额。
采用了多种行之有效的品牌推广方式 列表A创建了这样一个表格的简单的例子。
CREATETABLE [dbo].[BankAccount]([TransactionID] [int] IDENTITY(1,1)NOTNULL, [TransactionDateTime] [datetime] NOTNULLCONSTRAINT[DF_BankAccount_TransactionDateTime] DEFAULT(getdate()),[Amount] [money] NOTNULLCONSTRAINT [DF_BankAccount_Amount] DEFAULT((0)),[TransactionType] [char](1)COLLATE SQL_Latin1_General_CP1_CI_AS NOTNULL,[AccountNumber] [varchar](50)COLLATE SQL_Latin1_General_CP1_CI_AS NULL, CONSTRAINT [PK_BankAccount] PRIMARYKEYCLUSTERED ( [TransactionID] ASC)WITH(PAD_INDEX =OFF, IGNORE_DUP_KEY =OFF)ON [PRIMARY])ON [PRIMARY]
列表A
1 02:33:42..002 02:34:50..003 02:35:04.857250.004 02:42:19..25
因为日期是缺省设定的,你要做的就是加入一些金额。例子中为了简单起见,假设只有一个银行账户(为了更符合实际情况,可以添加一个BankAccountNumber列)。 现在你就能够创建一个包括了当前余额的查询。因为你已经在同一列中用正负数值记录了存款和取款值,所以列中的累计值是很容易算出的。你要得到当前的余额,就要计算出以前所有交易的总值,然后将这个值和当前的交易相加。列表B中的查询实现了这一点。 SELECT transactionid, transactiondatetime, amount,(SELECT SUM(amount)FROM nkaccount as D1WHERE ansactiondatetime = ansactiondatetime) AS balanceFROM nkaccount AS D0
列表B这样就得到了以下的结果集: 1 02:33:42..00 10000.002 02:34:50..00 9500.003 02:35:04.857250.00 9750.004 02:42:19..25 9625.75
如这个例子所示,只要你理解了要求,就可以很容易地建立累计值。所示的例子假设表格中只包括一个账户,但是要处理多个账户也很简单。添加一个BankAccountNumber 列和一个指定利息数量的WHERE谓词即可。 你也可以把这个例子倒过来用,如在一个存货计算中创建一个不同的运行。你从存货1,000开始,然后减去各种花销和收据。 这样的查询有两个优点: ● 你不需要储存结果。当用账户编号或外键操作时,执行可以如闪电般迅速。 ● 你以一个标签结束事务,它可以逐行进行检查。如果出现问题的话,你可以将导致问题出现的事务隔离。
查看本文来源
西安妇科西安哪家妇科医院好
孩子消化不良吃什么好
- 上一页:如何使用数据库嵌套子查覆盖
- 下一页:如何使用校勘功能呢
-
去朋友新家,我一看客厅不曾阳台,采光差,皱了下眉他就不高兴了!
那时候周围的密友都送给了寝子,每次外墙好之前,我会去参观,主要是学习...
2023-09-29
-
想申请TOP商学院毕业生必不可少的,你还不知道?
原【孜循】现今更名为【国际英语教育智库】 改变的是名称,不变的是产品...
2023-09-18
-
最高检:当前涉疫犯罪一般来说与疫情初发阶段相比发生变化
最高人民检察院19日发布数据说明了,全国检察机关1至3年末总计审理审查裁...
2023-09-05
-
美国“双雄”崛起!波音星际客船事与愿违对接国际空间站,意味着啥?
国际上太空梭的独立自主性每个人都发觉吧,它的确是造就了生命的奇迹,并...
2023-09-04
-
赵薇的家境怎么样 赵薇的成功是依靠什么呢
天天向上是一位十分熟悉的画家。那时候天天向上在电视台界很红。每个人都...
2023-09-02
-
猪八戒挑的担子里,有一件宝宝,能够阻止孙悟空成佛
大家都告诉,《红楼梦》是而今七侠五义之一,是由明末作家施耐庵创作。因...
2023-08-30