2017-10-27 24 views
0

私は、クレジット/デビットの列に基づいて累積残高を計算するクエリに余分な列を追加しようとしています。2列の累積合計値

私のクエリは、これまでのようになります。

SELECT T1.[RefDate], T1.[TransId], T1.[BaseRef], T1.[LineMemo], T3.[Dscription], T1.[Debit], T1.[Credit], T4.[AcctName] 
    FROM OJDT T0 
    right JOIN JDT1 T1 ON T0.TransId = T1.TransId 
    left JOIN OPCH T2 ON T0.TransId = T2.TransId 
    left JOIN PCH1 T3 ON T3.DocEntry = T2.DocEntry 
    left JOIN OACT T4 ON T1.Account = T4.AcctCode 
    WHERE T4.[AcctCode] = [%0] AND 
    T1.[RefDate] BETWEEN [%1] AND [%2] 

答えて

1

あなたは、ウィンドウSUMを使用することができます。Debit列が正の値が含まれ

SELECT T1.[RefDate], T1.[TransId], T1.[BaseRef], T1.[LineMemo], T3.[Dscription], 
    T1.[Debit], T1.[Credit], T4.[AcctName], 
    SUM(ISNULL(Debit,0)+ISNULL(Credit,0)) OVER(PARTITION BY ... ORDER BY refDate) 
FROM OJDT T0 
right JOIN JDT1 T1 ON T0.TransId = T1.TransId 
left JOIN OPCH T2 ON T0.TransId = T2.TransId 
left JOIN PCH1 T3 ON T3.DocEntry = T2.DocEntry 
left JOIN OACT T4 ON T1.Account = T4.AcctCode 
WHERE T4.[AcctCode] = [%0] AND 
    T1.[RefDate] BETWEEN [%1] AND [%2]; 

場合は-を前に付けする必要があります。周りOVER

+0

こんにちは、これはポイントに動作します:

SUM(ISNULL(Debit,0)+ISNULL(Credit,0)) OVER(RANGE UNBOUNDED PRECEDING AND CURRENT ROW) AS RunningTotal 

これは、クエリのような何かになります。それは列の罰金を表示しますが、ちょうど借方/クレジット列のいずれかから値を複製しているようで、実際にそれらを追加しているようではありません。これは私に間違って 'Partition By'を使ってもらえますか?私は100%それを使用する方法ではありません。どうもありがとう –

1

ドキュメント:https://msdn.microsoft.com/en-us/library/ms189461(v=SQL.110).aspx

あなたはおそらく例Cは、パーティションにしたくないように見えるけれども、あなたはRANGEを使用する最も有用であることがわかります。

あなたの算出列のため、このような何かをしたいでしょう:

SELECT T1.[RefDate], T1.[TransId], T1.[BaseRef], T1.[LineMemo], T3.[Dscription], T1.[Debit], T1.[Credit], T4.[AcctName], 
    SUM(ISNULL(Debit,0)+ISNULL(Credit,0)) 
       OVER(RANGE UNBOUNDED PRECEDING AND CURRENT ROW) AS RunningTotal 
      FROM OJDT T0 
      right JOIN JDT1 T1 ON T0.TransId = T1.TransId 
      left JOIN OPCH T2 ON T0.TransId = T2.TransId 
      left JOIN PCH1 T3 ON T3.DocEntry = T2.DocEntry 
      left JOIN OACT T4 ON T1.Account = T4.AcctCode 
      WHERE T4.[AcctCode] = [%0] AND 
      T1.[RefDate] BETWEEN [%1] AND [%2]