根据多个条件为列赋值

Assign a value to a column based on multiple conditions

我在 SQL 中有会计数据。这些是为销售而创建的条目,因此对于每笔销售,也有一个用于抵消销售成本的条目。在我们使用的会计系统中,它会自动在 TxnId 列中为销售行自动生成一个交易 ID,而不是出于某种我不知道的原因为销售行的成本。我使用以下查询提取数据:

  SELECT account,name, memo, debit,credit,amount,txnid,refnum,ROW_NUMBER()
                    OVER ( 
                      partition BY memo, refnum 
                      ORDER BY account,memo,amount desc) AS Row_Counter
  FROM [dbo].[Table] order by memo asc

结果 table 如下所示:

Account                Name       Memo           Debit    Credit   Amount   TxnID      RefNum    Row_Counter 
Sales                Company A    Wingding 1     Null     855       855    5EASUC-X    12345        1
CostofGoodsSold      Company A    Wingding 1     -684     Null     -684    Null        12345        2
Sales                Company A    Wingding 2     Null     910       910    5EASUC-X    12345        1
CostofGoodsSold      Company A    Wingding 2     -850     Null     -850    Null        12345        2
Sales                Company A    Wingding 3     Null     760       760    5EASUC-X    12345        1
CostofGoodsSOld      Company A    Wingding 3     -665     Null     -665    Null        12345        2

我想做的是修改上面的查询,在末尾添加一列,将销售列中的金额与基于备注列的销售商品成本行放在同一行中。我希望得到一个看起来像这样的 table:

Account                Name       Memo           Debit    Credit   Amount   TxnID      RefNum    Row_Counter  Newnum
Sales                Company A    Wingding 1     Null     855       855    5EASUC-X    12345        1         855
CostofGoodsSold      Company A    Wingding 1     -684     Null     -684    Null        12345        2         855
Sales                Company A    Wingding 2     Null     910       910    5EASUC-X    12345        1         910
CostofGoodsSold      Company A    Wingding 2     -850     Null     -850    Null        12345        2         910
Sales                Company A    Wingding 3     Null     760       760    5EASUC-X    12345        1         760
CostofGoodsSOld      Company A    Wingding 3     -665     Null     -665    Null        12345        2         760

如果有人有任何建议,他们将不胜感激。

重复使用行号的模式:

                MIN(Credit) OVER (PARTITION BY memo, refnum) AS Newnum

MIN OVER 没有排序方式,只有一个分区。我选择 MIN 也没有任何特别的原因; SUM(如 Gabriel 使用的那样)、MAX、AVG 会同样有效,因为它们都忽略空值,而且从您的示例数据来看,似乎只能选择 1 个剩余的非空值

这就是我所理解的您想要的:

  SELECT account,name, memo, debit,credit,amount,txnid,refnum,ROW_NUMBER()
                    OVER ( 
                      partition BY memo, refnum 
                      ORDER BY account,memo,amount desc) AS Row_Counter
, SUM(Credit) OVER (PARTITION BY memo) as Newnum
  FROM [dbo].[Table] order by memo asc