带有借方贷方余额的SQL Server运行总计

导航

我想在下表中根据借方和贷方amt进行总计金额的计算,有一列drcr,其中“ c”代表贷方,“ d”代表借方,也应使用分组名称来完成。

我想使用SQL Server查询以下输出

    Name  amt drcr Total
    | 'abc'| 1| 'c'|1 |
    | 'abc'| 5| 'd'|-4|
    | 'abc'| 2| 'c'|-2|
    | 'abc'| 1| 'c'|-1|
    | 'bcd'| 1| 'c'|15|
    | 'bcd'| 1| 'd'|0 |
    | 'bcd'| 5| 'c'|5 |
    | 'bcd'| 8| 'd'|-3|
    | 'bcd'| 0| 'c'|-3|

从以下输入

CREATE TABLE #temp
(
  intId INT IDENTITY(1, 1) ,
  varName VARCHAR(50) ,
  decAmt DECIMAL(28, 0) ,
  charCrDr CHAR(1) ,  -- c cr, d dr
  decTotal DECIMAL(28, 0)
)
INSERT  INTO #temp
    ( varName, decAmt, charCrDr )
VALUES  ( 'abc', 1, 'c' ),
    ( 'abc', 5, 'd' ),
    ( 'abc', 2, 'c' ),
    ( 'abc', 1, 'c' ),
    ( 'bcd', 15, 'c' ),
    ( 'bcd', 15, 'd' ),
    ( 'bcd', 5, 'c' ),
    ( 'bcd', 8, 'd' ),
    ( 'bcd', 0, 'c' )

我已经使用以下解决方案解决了

SELECT  *
INTO    #temp1
FROM    #temp AS T

UPDATE  #temp1
SET     #temp1.intAmt = CAST(-#temp1.decAmt AS DECIMAL)
WHERE   charCrDr = 'd'

SELECT  T.intId ,
    T.varName ,
    T.charCrDr ,
    T.decAmt ,
    SUM(T2.decAmt) AS balance
FROM    #temp1 AS T
    INNER JOIN #temp1 AS T2 ON T2.varName = T.varName
                               AND T2.intId <= T.intId
GROUP BY T.intId ,
    T.varName ,
    T.charCrDr ,
    T.decAmt

但是我想最好的方法是什么

感谢你

Zohar Peled

试试这个:(已改进

SELECT intId, varName, decAmt, charCrDr, 
       SUM(CASE WHEN charCrDr = 'c' THEN
               decAmt
           ELSE
              decAmt * -1
           END )
           OVER (PARTITION BY varName ORDER BY intId) As decTotal
FROM #Temp;

在这里看小提琴

说明:

  • CASE会决定是否给decAmt添加为正数或负数的SUM
  • PARTITION BY方法的总和将每个varName的单独计算(这是在对方的回答丢失)
  • 这样ORDER BY可以确保总和计算正确

这将适用于任何受支持的Sql Server版本(2005及更高版本)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从表格贷方借方列中选择运行余额

来自分类Dev

SQL Server递归中的运行总计

来自分类Dev

SQL Server:内部联接运行总计

来自分类Dev

SQL查询-贷方,借方,余额

来自分类Dev

在SQL Server中添加正在运行的总计列

来自分类Dev

SQL Server 2012-分开运行总计

来自分类Dev

在SQL Server 2014上使用over子句运行总计

来自分类Dev

SQL Server 2012-Oder按借方,贷方

来自分类Dev

SQL动态运行总计

来自分类Dev

如何在SQL Server 2008中计算运行总计(月初)

来自分类Dev

SQL Server 2012-根据另一列的值重置运行总计

来自分类Dev

将累积(运行)总计添加到TSQL查询(SQL Server 2008)?

来自分类Dev

相对于 SQL Server 中的另一列运行总计

来自分类Dev

根据每个 customerID 的另一列中的值重置运行总计 - SQL Server

来自分类Dev

需要计算借方的运行余额

来自分类Dev

模数后具有最小余额的运行总计

来自分类Dev

SQL从运行总计中删除

来自分类Dev

分组数据SQL的运行总计

来自分类Dev

SQL查询找到运行总计

来自分类Dev

在SQL中获得运行总计

来自分类Dev

创建带有运行总计的嵌套词典

来自分类Dev

SQL Server创建总计行

来自分类Dev

SQL Server:“数字”或“总计”表

来自分类Dev

复杂的MySQL贷方借方余额

来自分类Dev

从贷方和借方记录计算余额

来自分类Dev

如何从贷方和借方计算余额?

来自分类Dev

贷方 - 借方 + 前一行余额

来自分类Dev

如何在SQL中计算“运行总计”

来自分类Dev

Oracle SQL聚合减去运行总计