| 订阅 | 在线投稿
分享
 
 
 

如何使用SQL Server数据库查询累计值

2008-10-30 08:14:22 编辑來源:互联网 国际版 评论
 
 
本文为【如何使用SQL Server数据库查询累计值】的汉字拼音对照版显示拼音
  youzheyangyigeyaoqiutayaochuangjianyigeSQL ServerchaxunqizhongbaokuojiyushijianshikedeleijizhidianxingdelizijiushiyigeyinxingzhanghuyinweinimeiyicidoushizaibutongdeshijianqucunqianhequqianduirenyiyigezhanghulaishuozaimougeshijiandiandouyaosuanchutadejiecunkuanhedaiqukuanzhihemeiyibijiaoyizhihounidouxiangzhidaodangqiandeyueliebiaoAchuangjianlezheyangyigebiaogedejiandandelizi

  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]

  liebiaoA

  xiamianshiyixieshilixing

  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

  yinweiriqishiqueshengshedingdeniyaozuodejiushijiaruyixiejinelizizhongweilejiandanqijianjiashezhiyouyigeyinxingzhanghuweilegengfuheshijiqingkuangkeyitianjiayigeBankAccountNumberlie

  xianzainijiunenggouchuangjianyigebaokuoledangqianyuedechaxunyinweiniyijingzaitongyiliezhongyongzhengfushuzhijilulecunkuanhequkuanzhisuoyiliezhongdeleijizhishihenrongyisuanchudeniyaodedaodangqiandeyuejiuyaojisuanchuyiqiansuoyoujiaoyidezongzhiranhoujiangzhegezhihedangqiandejiaoyixiangjialiebiaoBzhongdechaxunshixianlezheyidian

  SELECT

  transactionid,

  transactiondatetime,

  amount,

  (SELECT SUM(amount)

  FROM dbo.bankaccount as D1

  WHERE D1.transactiondatetime <= D0.transactiondatetime) AS balance

  FROM dbo.bankaccount AS D0

  liebiaoB

  zheyangjiudedaoleyixiadejieguoji

  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

  ruzhegelizisuoshizhiyaonilijieleyaoqiujiukeyihenrongyidijianlileijizhisuoshidelizijiashebiaogezhongzhibaokuoyigezhanghudanshiyaochuliduogezhanghuyehenjiandantianjiayigeBankAccountNumber lieheyigezhidinglixishuliangdeWHEREweicijike

  niyekeyibazhegelizidaoguolaiyongruzaiyigecunhuojisuanzhongchuangjianyigebutongdeyunxingnicongcunhuo1000kaishiranhoujianqugezhonghuaxiaoheshouju

  zheyangdechaxunyoulianggeyoudian

   nibuxuyaochucunjieguodangyongzhanghubianhaohuowaijiancaozuoshizhixingkeyirushandianbanxunsu

   niyiyigebiaoqianjieshushiwutakeyizhuxingjinxingjiancharuguochuxianwentidehuanikeyijiangdaozhiwentichuxiandeshiwugeli原文
 
 
有这样一个要求,它要创建一个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开始,然后减去各种花销和收据。 这样的查询有两个优点: ● 你不需要储存结果。当用账户编号或外键操作时,执行可以如闪电般迅速。 ● 你以一个标签结束事务,它可以逐行进行检查。如果出现问题的话,你可以将导致问题出现的事务隔离。
󰈣󰈤
日版宠物情人插曲《Winding Road》歌词

日版宠物情人2017的插曲,很带节奏感,日语的,女生唱的。 最后听见是在第8集的时候女主手割伤了,然后男主用嘴帮她吸了一下,插曲就出来了。 歌手:Def...

兄弟共妻,我成了他们夜里的美食

老钟家的两个儿子很特别,就是跟其他的人不太一样,魔一般的执着。兄弟俩都到了要结婚的年龄了,不管自家老爹怎么磨破嘴皮子,兄弟俩说不娶就不娶,老父母为兄弟两操碎了心...

网络安全治理:国家安全保障的主要方向是打击犯罪,而不是处置和惩罚受害者

来源:中国青年报 新的攻击方法不断涌现,黑客几乎永远占据网络攻击的上风,我们不可能通过技术手段杜绝网络攻击。国家安全保障的主要方向是打击犯罪,而不是处置和惩罚...

 
 
 
>>返回首页<<
 为你推荐
 
 
 
 转载本文
 UBB代码 HTML代码
复制到剪贴板...
 
 
 热帖排行
 
黑色魅力_醉人的美
梦幻蒙眬_如痴如醉
北京的“尖叫”建筑
高天上流云
 
 
王朝网络微信公众号
微信扫码关注本站公众号wangchaonetcn
 
  免责声明:本文仅代表作者个人观点,与王朝网络无关。王朝网络登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
©2005- 王朝网络 版权所有