All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
SQL,Server中的CTE_mssql学习_编程技术
C#教程:C#2.0 新特性 局部类
将输入的20041219等的数字字符串等格式化成日期型_[Asp.Net教程]
visual c++ 中抽象类与纯虚函数的用法
关于MSSQL数据库日志满的快速解决办法_[SQL,Server教程]
什么是.net的接口和抽象类_[Asp.Net教程]
SQL循序渐进(10)合计函数_[SQL,Server教程]
web.config配置文件示例_[Asp.Net教程]
C#中ListBox控件应用实例
SQL,Server,CLR全功略之二---CLR存储过程_mssql学习_编程技术
Reading number is top 10 pictures
西游四格漫画(四)
HongMenYan premiere XinLiangGong clairvoyant outfit PK YiFeiLiu1
看到这个手速,决定过年就让我家猫帮我抢红包了。。
Startling Russian girl blind date scene1
西班牙山村小景3
王艳写真温柔如水2
Forced sex girl living abroad2
美女就是美女
So beauty, will let you spray blood2
Sora aoi after swimming
Download software ranking
I'm come from Beijing1
Boxer's Top ten classic battle9
JSP+Ajax Web development typical examples
Unix video tutorial18
Sora aoi 120 minutes
matrix2
Tram sex maniac 2 (H) rar bag15
软件工程思想
塘西风月痕
C语言教程TXT
归海一刀 published in(发表于) 2014/2/3 6:43:38 Edit(编辑)
如何使用SQL Server数据库查询累计值_[SQL Server教程]

如何使用SQL Server数据库查询累计值_[SQL Server教程]

如何使用SQL Server数据库查询累计值_[SQL Server教程]


有这样一个要求,它要创建一个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 2006-11-03 02:33:42.34010000.00
2 2006-11-03 02:34:50.467-500.00
3 2006-11-03 02:35:04.857250.00
4 2006-11-03 02:42:19.763-124.25


因为日期是缺省设定的,你要做的就是加入一些金额。例子中为了简单起见,假设只有一个银行账户(为了更符合实际情况,可以添加一个BankAccountNumber列)。


现在你就能够创建一个包括了当前余额的查询。因为你已经在同一列中用正负数值记录了存款和取款值,所以列中的累计值是很容易算出的。你要得到当前的余额,就要计算出以前所有交易的总值,然后将这个值和当前的交易相加。列表B中的查询实现了这一点。




SELECT 
transactionid,
transactiondatetime,
amount,
(SELECT SUM(amount)
FROM dbo.bankaccount as D1
WHERE D1.transactiondatetime <= D0.transactiondatetime) AS balance
FROM dbo.bankaccount AS D0



列表B

这样就得到了以下的结果集:




1 2006-11-03 02:33:42.34010000.00 10000.00
2 2006-11-03 02:34:50.467-500.00 9500.00
3 2006-11-03 02:35:04.857250.00 9750.00
4 2006-11-03 02:42:19.763-124.25 9625.75


如这个例子所示,只要你理解了要求,就可以很容易地建立累计值。所示的例子假设表格中只包括一个账户,但是要处理多个账户也很简单。添加一个BankAccountNumber 列和一个指定利息数量的WHERE谓词即可。


你也可以把这个例子倒过来用,如在一个存货计算中创建一个不同的运行。你从存货1,000开始,然后减去各种花销和收据。


这样的查询有两个优点:


● 你不需要储存结果。当用账户编号或外键操作时,执行可以如闪电般迅速。


● 你以一个标签结束事务,它可以逐行进行检查。如果出现问题的话,你可以将导致问题出现的事务隔离。


来源:网络







添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.