【问题标题】:MSSQL distribute negative amount to positive amount rowsMSSQL 将负数分配给正数行
【发布时间】:2018-07-20 20:35:42
【问题描述】:

我认为这是可能的,但我停留在累积总和上。我在顶部加入了一个正数和一个负数。任何可能的方法来分配这个负金额来折叠正金额表?

ROW_NUM AMOUNT N_AMOUNT NEEDED_RESULT
------- ------ -------- -------------
1       100.00 NULL     100
2       300.00 NULL     200
3       300.00 -400.00  0

table example

【问题讨论】:

  • 你当然可以用光标来完成。
  • @Alan 这是决定之一,但 OVER ... UNBOUND 看起来会更好。如果可以的话。
  • @Alan 你可以,但你到底为什么会推荐这样一个坏主意? :)
  • @Larnu:光标有时是一个可行的选择。
  • @MitchWheat 我不反对,只是不同意可以通过数据集方法实现的目标。游标实际上应该只用于迭代任务,而不是像运行总数这样的东西。

标签: sql sql-server tsql math


【解决方案1】:
DECLARE @T TABLE (ROW_NUM INT, AMOUNT MONEY,N_AMOUNT MONEY, NEEDED_RESULT MONEY)
INSERT INTO @T 
SELECT * FROM (VALUES
(1,       100.00, NULL     ,100),
(2,       300.00, NULL     ,200),
(3,       300.00, -400.00  ,0  )
) a(ROW_NUM , AMOUNT ,N_AMOUNT , NEEDED_RESULT )


;WITH x AS 
(
    SELECT 
        *,
        [R] = SUM(Amount)  OVER (ORDER BY ROW_NUM DESC) + SUM(N_Amount) OVER ()
    FROM @T
)
SELECT ROW_NUM,AMOUNT,N_AMOUNT, NEEDED_RESULT,
    CASE 
        WHEN R < 0 THEN 0  
        WHEN R > Amount THEN Amount
        ELSE R
    END
FROM x
ORDER BY ROW_NUM

【讨论】:

    猜你喜欢
    • 2019-10-07
    • 2021-09-18
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-14
    • 2013-03-20
    相关资源
    最近更新 更多