滚动平衡SQL

时间:2017-02-06 13:53:09

标签: sql sql-server running-balance

您好,我需要一些帮助 我有以下选择声明但滚动平衡似乎不起作用。

Select Distinct
        Substring(Convert(Varchar(10), M.ValueDate, 101), 0, 11) As 'Value Date'
      , base.Reference
      , 'Transaction Discription' As [Transaction Discription]
      , M.Action
      , base.Nominal
      , base.Consideration
      , (BrokerFee + CSDPFee + CSDFee + InvestorProtectionLevyFee + ExchangeFee + GuaranteedFee) As 'Transaction Fee'
      , base.VATFee As 'VAT'
      , base.SecuritiesTransferTax
      , (base.Consideration - (BrokerFee + CSDPFee + CSDFee + InvestorProtectionLevyFee + ExchangeFee + GuaranteedFee)) As [Total Consideration]
      , (Select Top (1)
                Round(Sum((base.Consideration - (BrokerFee + CSDPFee + CSDFee + InvestorProtectionLevyFee + ExchangeFee + GuaranteedFee))), 2)
         From   CashMovements T2
         Where  T2.RowId <= M.RowId
                And T2.AccountNumber = M.AccountNumber
                And T2.Action In ('W', 'D')
        ) As 'RunningTotal'
From    (Select *
         From   Instructions
         Where  instructionId In (Select  Distinct
                                            XReference
                                  From      cashmovements As CM
                                  Where     accountnumber In (Select    AccountNumber
                                                              From      CashAccounts
                                                              Where     AccountNumber In (Select Distinct
                                                                                                    AccountNumber
                                                                                          From      CrossReferences
                                                                                          Where     Class In (Select    ScripAccountId
                                                                                                              From      ScripAccounts))))
        ) As base
Inner Join CashMovements As M
        On M.XReference = base.InstructionId
Where   M.AccountNumber = '00000000006'
        And M.Action In ('W', 'D')
        And base.Consideration <> 0
        And Nominal <> 0
Group By M.ValueDate
      , base.Reference
      , M.Action
      , base.Nominal
      , base.Consideration
      , base.BrokerFee
      , base.VATFee
      , base.CSDPFee
      , base.CSDFee
      , base.InvestorProtectionLevyFee
      , base.ExchangeFee
      , base.GuaranteedFee
      , base.SecuritiesTransferTax
      , M.RowId
      , M.AccountNumber
Order By base.Reference;

似乎只复制了值

以下是我得到的结果集:

> Total Consideration      RunningTotal
> 137.21                    137.21  
> 137.21                    137.21
> 1462.25                   1462.25
> 4406.74                   4406.74
> 1462.25                   1462.25
> 1462.25                   1462.25
> 5878.99                   5878.99

这是我想要的结果集

> Total Consideration      RunningTotal
> 137.21                    137.21  
> 137.21                    274.42
> 1462.25                   1736.67
> 4406.74                   6143.41
> 1462.25                   7605.66
> 1462.25                   9067.91
> 5878.99                   14946.9

因此,运行总计应增加每行的总代价

1 个答案:

答案 0 :(得分:0)

如果没有看到数据以及您认为错误的内容很难说,但我认为您的子查询列应该删除前1个语句,并且base.Consideration可能需要移出select。我也在外面转了一圈:

  , Round(base.Consideration - (Select Sum(BrokerFee + CSDPFee + CSDFee + InvestorProtectionLevyFee + ExchangeFee + GuaranteedFee)
    From   CashMovements T2
    Where  T2.RowId <= M.RowId
    And T2.AccountNumber = M.AccountNumber
    And T2.Action In ('W', 'D')
), 2) As 'RunningTotal'
相关问题