首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >运行总Sybase

运行总Sybase
EN

Stack Overflow用户
提问于 2012-05-24 10:15:09
回答 1查看 823关注 0票数 0

我正在编写一个具有以下要求的sql脚本:- 1)它应该能够从Asset_Transaction表中获取每条记录,并且对于每个资产计算单位数量的每个记录上的“运行总计”。计算这个正在运行的总计列的方法是,对所有Asset_Transactions的单位进行汇总,其中Transaction_datetime小于或等于正在显示的Asset_id的Transaction_datetime。我已经做到了这一点,我认为这是正常的。

不过,我的第二项要求是:

2)计算该日期的单位值,即从sell_unitPrice表中得到每个asset_transaction上的日期和该特定资产的日期,并将其乘以所添加的单位数(“运行总计”)。我正在为第二步而奋斗

Sybase数据库模式单击链接--

到目前为止,我编写的代码.

代码语言:javascript
复制
set nocount on
   go

     declare mla_exceptions scroll cursor for
                 select distinct mla.asset_id  from    asset_transaction mla
go

Print 'asset_id, Amount, Transaction Name, Total Units, Transaction Datetime'

declare @ml_asset double precision

open mla_exceptions

fetch first mla_exceptions

              into @ml_asset  

              while (@@sqlstatus = 0)

              begin  
              select    mla.asset_id , ',',
               -- mla.transaction_datetime, ',',
              mla.amount, ',',
              tt.name, ',',
             (select sum (units) from asset_transaction where transaction_datetime <= mla.transaction_datetime  and asset_id = @ml_asset  and status = 'A' ) 'Running Total Units', ',',
              transaction_datetime 
          from    asset_transaction mla noholdlock 
          Left outer join transaction_type tt on tt.transaction_type_id = mla.transaction_type_id  where   mla.asset_id = @ml_asset 
order by mla.asset_id

fetch next mla_exceptions
 into @ml_asset 
end

close mla_exceptions

deallocate cursor mla_exceptions

go
EN

回答 1

Stack Overflow用户

发布于 2012-09-14 07:16:59

祝贺你。我很佩服您在解决需求1方面的坚韧不拔。不幸的是,性能会很差,因为您在其内部读取同一表两次,并试图用noholdlock控制锁。

如果同一资产id多次存在怎么办?您将多次计算同一资产的总和。

这里有一个更好的SQL解决方案。创建一个名为#asset_sum、列asset_id和asset_sum的临时表。然后将这个临时表与原始表连接起来。

结果是没有游标,锁更少,没有冗余。

我稍后再查,给你一个详细的答复。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10735461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档