我有SQL会计数据。这些是要进行销售的分录,因此,每进行一次销售都会有一个商品成本抵销分录。当客户购买相同的产品但数量不同时,它将具有相同的备注行,只是销售和商品成本的金额不同。在我们使用的会计系统中,由于某种我不知道的原因,它仅在销售行中自动为TxnId列生成交易ID,而不是为销售行的成本生成交易ID。我使用以下查询提取数据:
SELECT
account,
name,
memo,
debit,
credit,
amount,
txnid,
refnum,
ROW_NUMBER() OVER (PARTITION BY memo, refnumber ORDER BY account,memo,abs(amount)) AS memo_group
FROM [dbo].[Table]
WHERE refnumber = '67175'
结果表如下:
Account Name Memo Debit Credit Amount TxnID RefNum Row_Counter
Sales Company A Wingding 1 Null 855 855 5EASUC-X 12345 1
Sales Company A Wingding 1 Null 400 400 5EASUC-X 12345 2
CostofGoodsSold Company A Wingding 1 -650 Null -650 Null 12345 3
CostofGoodsSold Company A Wingding 1 -200 Null -200 Null 12345 4
Sales Company A Wingding 2 Null 760 760 5EASUC-X 12345 1
Sales Company A Wingding 2 Null 665 665 5EASUC-X 12345 2
CostofGoodsSold Company A Wingding 2 -600 Null -600 Null 12345 3
CostofGoodsSold Company A Wingding 2 -465 Null -465 Null 12345 4
我想做的是将销售行中的贷方金额分配给另一列中相应的销售商品成本,同时保持销售行的金额不变。我希望得到一个像这样的表:
Account Name Memo Debit Credit Amount TxnID RefNum Row_Counter New_Col
Sales Company A Wingding 1 Null 855 855 5EASUC-X 12345 1 855
Sales Company A Wingding 1 Null 400 400 5EASUC-X 12345 2 400
CostofGoodsSold Company A Wingding 1 -650 Null -650 Null 12345 3 855
CostofGoodsSold Company A Wingding 1 -200 Null -200 Null 12345 4 400
Sales Company A Wingding 2 Null 760 760 5EASUC-X 12345 1 760
Sales Company A Wingding 2 Null 665 665 5EASUC-X 12345 2 665
CostofGoodsSold Company A Wingding 2 -600 Null -600 Null 12345 3 760
CostofGoodsSold Company A Wingding 2 -465 Null -465 Null 12345 4 665
我尝试使用Windows函数来执行此操作,但是没有任何运气。有人对此有任何建议吗?
答案 0 :(得分:0)
您将结合使用CTE和窗口功能。一旦订购了将它们放入CTE中的方式,您就可以使新列使用LAG函数,该函数复制上一行的数据“直到看到新产品”。这也假设您有一个像ProductNo这样的PrimaryKey可以将两者结合起来。希望对您有所帮助。