相关疑难解决方法(0)

如何在不使用游标的情况下计算SQL中的运行总计?

为简洁起见,我省略了所有光标设置和临时表中的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是否能够以与连接字符串相同的方式对数字求和.也就是说,在不使用游标的情况下每行创建一个"运行平衡".

可能吗?

sql sql-server

24
推荐指数
3
解决办法
6万
查看次数

如何计算运行乘法

我有两张桌子

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))

SQLFIDDLE

这里对于每一行,前一行的Running_Mul值是baseline和第一行的baseline …

sql sql-server sql-server-2008

11
推荐指数
3
解决办法
1942
查看次数

SQL Server的复杂选择查询

我在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)

sql sql-server

7
推荐指数
1
解决办法
201
查看次数

具有分组依据的多个运行总计

我正在努力找到一个很好的方法来运行与其中的组或等效的运行总计.以下基于光标的运行总计在一个完整的表上工作,但我想扩展它以添加"客户端"维度.因此,如下所示,我会在一个表格中为每个公司(即公司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 sql-server

5
推荐指数
3
解决办法
7196
查看次数

分区会导致运行总计查询

我正在寻找一种快速的方法来创建在特定列分区的大型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),此解决方案似乎非常快速.但是,我需要按用户进行有效分区 - 按用户按月累计累计.

有没有人知道扩展多重赋值变量概念的方法来解决这个问题,或者除了相关子查询或游标之外的任何其他想法?

非常感谢任何提示.

sql-server sql-server-2008

2
推荐指数
1
解决办法
3090
查看次数

标签 统计

sql-server ×5

sql ×4

sql-server-2008 ×2