-1

我有下表

QuotationId QuotationDetailId   DriverId    RangeFrom   RangeTo FixedAmount UnitAmount
-------------------------------------------------------------------------------------------
    10579      7                   1           1          1     1154.00      0.00
    10579      7                   2           2          2     1731.00      0.00
    10579      11                  1           0         10     0.00         88.53
    10579      11                  2           11        24     885.30       100.50
    10579      11                  3           25        34     2292.30      88.53

我需要使用以下逻辑在 SQL Server 中编写查询,

  • 分组为 QuotationId + QuotationDetailId。
  • 对于这个块中的每一个,我需要从第二行对上一行的值求和以获得固定

    Amount + UnitAmount * RangeFrom + FixedAmount of the current row
    

所以在这种情况下,结果输出应该是

  QuotationId QuotationDetailId   DriverId    RangeFrom   RangeTo   FixedAmount  UnitAmount
10579             7                1           1           1        1154.00    0.00
10579             7                2           2           2        2885.00    0.00
10579             11               1           0           10       0.00       88.53
10579             11               2           11          24       1770.60    100.50
10579             11               3           25          34       7174.90    88.53

我已经尝试了几个查询但没有成功,有人可以建议我这样做吗?

最好的问候法布里齐奥

4

2 回答 2

2

在 SQL Server 2012+ 中,您可以进行累积求和。我不确定你到底想要什么逻辑,但考虑到数据集,这似乎是合理的:

select t.*,
       sum(FixedAmount*UnitAmount) over (partition by QuotationId, QuotationDetailId
                                         order by DriverId
                                        ) as running_sum
from t;
于 2016-08-12T14:33:34.843 回答
0

您可以使用子查询,您的“金额”列将作为括号中的查询出现在列列表中,

SELECT ...fields..., 
       (SELECT SUM(A.unitAmount * A.RangeFrom + A.fixedAmount) 
               From YourTable A
               WHERE A.QuotationId = B.QuotationId 
               AND   A.QuotationDetailId = B.QuotationDetailId
               AND   A.DriverId <= B.DriverId) AS Amount
        From YourTable B 
于 2016-08-12T15:07:17.463 回答