典型的例子就是一个银行账户,因为你每一次都是在不同的时间去存钱和取钱。对任意一个账户来说,在某个时间点都要算出它的借(存款)和贷(取款)之和。每一笔交易之后,你都想知道当前的余额。列表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]4 2006-11-03 02:42:19763-12425 因为日期是缺省设定的,你要做的就是加入一些金额。例子中为了简单起见,假设只有一个银行账户(为了更符合实际情况,可以添加一个BankAccountNumber列)。 现在你就能够创建一个包括了当前余额的查询。因为你已经在同一列中用正负数值记录了存款和取款值,所以列中的累计值是很容易算出的。你要得到当前的余额,就要计算出以前所有交易的总值,然后将这个值和当前的交易相加。列表B中的查询实现了这一点。 SELECTtransactionid,transactiondatetime,amount,(SELECT SUM(amount)FROM dbobankaccount as D14 2006-11-03 02:42:19763-12425 962575 如这个例子所示,只要你理解了要求,就可以很容易地建立累计值。所示的例子假设表格中只包括一个账户,但是要处理多个账户也很简单。添加一个BankAccountNumber 列和一个指定利息数量的WHERE谓词即可。 你也可以把这个例子倒过来用,如在一个存货计算中创建一个不同的运行。你从存货1,000开始,然后减去各种花销和收据。 这样的查询有两个优点: ● 你不需要储存结果。当用账户编号或外键 *** 作时,执行可以如闪电般迅速。 ● 你以一个标签结束事务,它可以逐行进行检查。
UPDATE 表名
SET 小计 = (
SELECT SUM(小计)
FROM 表名 AS tbl2
WHERE(tbl2日期 <= 表名日期)
)
================================================
但是单纯这样写是有问题的。
你要用游标(Cursor)按照日期DESC的顺序来累加。否则会有重复计算。
但是这样的结构是很不好的。因为你隐藏了原始数据。
好的结构是将所有的原始数据都保留。
从中取出所有nck相同的hweight的值,是更新到所有nck相同的数据的hweight2字段中么?
这个是更新所有数据的hweight2为hweight的累加。
update tab a set hweight2=(select sum(hweight) from tab b where anck=bnck group by nck);
更新hweight3的值
update tab a set hweight3=hweight1-hweight-hweight2;
取值。
select hweight2,hweight3 from tab
这个累加可以写在存储过程中,在java中调用,也可以在java里面执行update语句。
试试!!
1、在同一个工作簿
=SUM(Sheet1!$E$2:$E$13) ‘sheet1是数据所以的工作表
2、在两个工作簿
=SUM('[数据库xls]Sheet1'!$E$2:$E$13)
//最快的方法 10000记录 23MS
public static void insert() {
// 开时时间
Long begin = new Date()getTime();
// sql前缀
String prefix = "INSERT INTO tb_big_data (count, create_time, random) VALUES ";
try {
// 保存sql后缀
StringBuffer suffix = new StringBuffer();
// 设置事务为非自动提交
connsetAutoCommit(false);
// Statement st = conncreateStatement();
// 比起st,pst会更好些
PreparedStatement pst = connprepareStatement("");
// 外层循环,总提交事务次数
for (int i = 1; i <= 100; i++) {
// 第次提交步长
for (int j = 1; j <= 10000; j++) {
// 构建sql后缀
suffixappend("(" + j i + ", SYSDATE(), " + i j
Mathrandom() + "),");
}
// 构建完整sql
String sql = prefix + suffixsubstring(0, suffixlength() - 1);
// 添加执行sql
pstaddBatch(sql);
// 执行 *** 作
pstexecuteBatch();
// 提交事务
conncommit();
// 清空上一次添加的数据
suffix = new StringBuffer();
}
// 头等连接
pstclose();
connclose();
} catch (SQLException e) {
eprintStackTrace();
}
// 结束时间
Long end = new Date()getTime();
// 耗时
Systemoutprintln("cast : " + (end - begin) / 1000 + " ms");
}
以上就是关于如何使用SQL Server数据库查询累计值全部的内容,包括:如何使用SQL Server数据库查询累计值、请问在数据库中累加查询怎么查、oracle数据库中怎么取出特定的值并将其累加,在将累加后的结果存入数据库等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)