基于多个条件为列分配值

问题描述 投票:0回答:2

我有SQL会计数据。这些是要进行销售的分录,因此,每进行一次销售,都会有一个抵销的商品销售成本分录。在我们使用的会计系统中,由于某种我不知道的原因,它仅在销售行中自动为TxnId列生成交易ID,而不是为销售行的成本生成交易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

结果表如下:

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

我正在尝试修改上面的查询,在末尾添加一列,该列将来自销售列的金额放在基于备注列的销售成本行的同一行中。我希望得到一个看起来像这样的表:

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

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

sql sql-server azure-sql-database uniqueidentifier
2个回答
0
投票

这是我了解的您想要的:

  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

0
投票

重新使用行号的模式:

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

MIN OVER没有命令,只是一个分区。我选择MIN也没有任何特殊原因; SUM(如Gabriel所使用的),MAX,AVG都可以很好地工作,因为它们都忽略空值,并且从您的示例数据看来,只能选择1个剩余的非空值

© www.soinside.com 2019 - 2024. All rights reserved.