为简洁起见,我省略了所有光标设置和临时表中的SELECT.基本上,此代码计算每个事务的所有事务的运行余额.
WHILE @@fetch_status = 0
BEGIN
set @balance = @balance+@amount
insert into @tblArTran values ( --from artran table
@artranid, @trandate, @type,
@checkNumber, @refNumber,@custid,
@amount, @taxAmount, @balance, @postedflag, @modifieddate )
FETCH NEXT FROM artranCursor into
@artranid, @trandate, @type, @checkNumber, @refNumber,
@amount, @taxAmount,@postedFlag,@custid, @modifieddate
END
Run Code Online (Sandbox Code Playgroud)
从另一个问题的答案中受到此代码的启发,
SELECT @nvcConcatenated = @nvcConcatenated + C.CompanyName + ', '
FROM tblCompany C
WHERE C.CompanyID IN (1,2,3)
Run Code Online (Sandbox Code Playgroud)
我想知道如果你得到了我的意思,SQL是否能够以与连接字符串相同的方式对数字求和.也就是说,在不使用游标的情况下每行创建一个"运行平衡".
可能吗?
我有两张桌子
WAC表
ID wac_inc item
-- ----------------- ----
1 2.310000000000000 A
2 1.100000000000000 A
3 2.130000000000000 A
4 1.340000000000000 A
Run Code Online (Sandbox Code Playgroud)
基线表
item baseline
---- ------------------
A 10.000000000000000
Run Code Online (Sandbox Code Playgroud)
预期结果
ID wac_inc item Running_Mul
-- ----------------- ---- -----------
1 2.310000000000000 A 10.231 -- 10 * (1+(2.310000000000000/100))
2 1.100000000000000 A 10.343541 -- 10.231 * (1+(1.100000000000000/100))
3 2.130000000000000 A 10.563858 -- 10.343541 * (1+(2.130000000000000/100))
4 1.340000000000000 A 10.705413 -- 10.563858 * (1+(1.340000000000000/100))
Run Code Online (Sandbox Code Playgroud)
找到的公式running_mul
是
基线*(1 +(wac_inc/100))
这里对于每一行,前一行的Running_Mul
值是baseline
和第一行的baseline …
我在SQL服务器中有一个临时表,如下所示
????????????????????????????????????
?Serial ? Account ? Due ? Balance ?
?1 ? A1 ? 1000 ? 3100 ?
?2 ? A1 ? 1000 ? 3100 ?
?3 ? A1 ? 1000 ? 3100 ?
?4 ? A1 ? 1000 ? 3100 ?
?1 ? A2 ? 100 ? 3100 ?
?2 ? A2 ? 100 ? 3100 ?
?1 ? B1 ? 1000 ? 1100 ?
?2 ? B1 ? 1000 ? 1100 ?
?1 ? B2 ? 100 ? …
Run Code Online (Sandbox Code Playgroud) 我正在努力找到一个很好的方法来运行与其中的组或等效的运行总计.以下基于光标的运行总计在一个完整的表上工作,但我想扩展它以添加"客户端"维度.因此,如下所示,我会在一个表格中为每个公司(即公司A,公司B,公司C等)创建总计
CREATE TABLE test (tag int, Checks float, AVG_COST float, Check_total float, Check_amount float, Amount_total float, RunningTotal_Check float,
RunningTotal_Amount float)
DECLARE @tag int,
@Checks float,
@AVG_COST float,
@check_total float,
@Check_amount float,
@amount_total float,
@RunningTotal_Check float ,
@RunningTotal_Check_PCT float,
@RunningTotal_Amount float
SET @RunningTotal_Check = 0
SET @RunningTotal_Check_PCT = 0
SET @RunningTotal_Amount = 0
DECLARE aa_cursor CURSOR fast_forward
FOR
SELECT tag, Checks, AVG_COST, check_total, check_amount, amount_total
FROM test_3
OPEN aa_cursor
FETCH NEXT FROM aa_cursor INTO @tag, @Checks, @AVG_COST, @check_total, @Check_amount, @amount_total
WHILE …
Run Code Online (Sandbox Code Playgroud) 我正在寻找一种快速的方法来创建在特定列分区的大型SQL Server 2008数据集中的累积总计,可能通过使用多分配变量解决方案.作为一个非常基本的示例,我想在下面创建"cumulative_total"列:
user_id | month | total | cumulative_total
1 | 1 | 2.0 | 2.0
1 | 2 | 1.0 | 3.0
1 | 3 | 3.5 | 8.5
2 | 1 | 0.5 | 0.5
2 | 2 | 1.5 | 2.0
2 | 3 | 2.0 | 4.0
Run Code Online (Sandbox Code Playgroud)
我们传统上使用相关子查询来完成此操作,但是对于大量数据(200,000多行和几个不同类别的运行总计),这并没有给我们提供理想的性能.
我最近阅读了有关在此处使用多个赋值变量进行累积求和的信息
http://sqlblog.com/blogs/paul_nielsen/archive/2007/12/06/cumulative-totals-screencast.aspx
在该博客的示例中,累积变量解决方案如下所示:
UPDATE my_table
SET @CumulativeTotal=cumulative_total=@CumulativeTotal+ISNULL(total, 0)
Run Code Online (Sandbox Code Playgroud)
对于上述示例中的单个用户(用户1或用户2),此解决方案似乎非常快速.但是,我需要按用户进行有效分区 - 按用户按月累计累计.
有没有人知道扩展多重赋值变量概念的方法来解决这个问题,或者除了相关子查询或游标之外的任何其他想法?
非常感谢任何提示.