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

如何使用SQL Server数据库查询累计值,第1张

典型的例子就是一个银行账户,因为你每一次都是在不同的时间去存钱和取钱。对任意一个账户来说,在某个时间点都要算出它的借(存款)和贷(取款)之和。每一笔交易之后,你都想知道当前的余额。列表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数据库中怎么取出特定的值并将其累加,在将累加后的结果存入数据库等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9710231.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存