根据多个条件为列赋值
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
我在 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