繁体   English   中英

如何根据条件在SQL Server中添加下一行和减去前一行

[英]How to add next and subtract preceding row in SQL Server based on condition

我正在尝试根据 SQL Server 中的TranslationType列计算累积总和。

样本数据:

Id  TransactionType Value
-------------------------
1   Receipt          10
2   Issue             2
3   Receipt          10
4   Issue             5
5   Issue             3

我试过了,但我有一个问题,我得到的输出是错误的:

Id  TransactionType DiffValue
-----------------------------
1   Receipt          10
2   Issue             8
3   Receipt          22
4   Issue             5
5   Issue             2

所需的差值输出:

Id  TransactionType  Value  DiffValue
---------------------------------------
1   Receipt           10        10
2   Issue              2         8  if issue then 10-2
3   Receipt           10        18  if receipt then 10+8 
4   Issue              5        13  if issue then 18-5
5   Issue              3        10  if issue then 13-3

SQL 创建脚本:

DROP TABLE #Temp 

CREATE TABLE #Temp
(
    Id INT,
    TransactionType VARCHAR(50),
    value INT,
)

INSERT INTO #Temp (Id, TransactionType, value)
VALUES (1, 'Receipt', 10), (2, 'Issue', 2), (3, 'Receipt', 10),
       (4, 'Issue', 5), (5, 'Issue', 3)

SELECT * FROM #Temp

我的查询尝试:

SELECT
    Id,
    TransactionType,
    CASE 
       WHEN TransactionType = 'Receipt' 
          THEN SUM(value) OVER (ORDER BY Id ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)  
       ELSE LAG(value) OVER (ORDER BY Id)  - value
    END AS DiffValue
FROM
    #Temp

您应该总结一个可以区分借方和贷方的CASE表达式:

SELECT 
    Id,
    TransactionType,
    SUM(CASE WHEN TransactionType = 'Receipt' THEN value ELSE -1.0*value END)
        OVER (ORDER BY Id ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS DiffValue
FROM #Temp
ORDER BY Id;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM