问题描述
我有下表,其中有两个销售订单,每个销售订单都有不同数量的交易。
销售订单 | 交易 | 金额 | 税 | 运费 | TotalTax(含运费税) |
---|---|---|---|---|---|
S1 | T1 | 12 | 0 | 3 | 5.5(这也包括第 4 列中的税) |
S1 | T2 | 27 | 4 | 3 | 5.5 |
S2 | T1 | 15 | 2.5 | 5 | 6 |
S2 | T2 | 10 | 2 | 5 | 6 |
在每个 SaleOrder 中,我有不同数量的交易,并且每笔交易在金额列中的发票金额加上税收列中每笔交易的税额。
在销售订单 1 中,我收取了 6 的运费,我除以交易数量,然后每笔收取 3。与销售订单 2 的情况类似,其中总运费为 10。
现在在 TotalTax 列中,我正在重复获取运费和交易税的总和。
如何在 SQL Server 中创建具有单独的运费税的列,如下所示:
销售订单 | 交易 | 金额 | 税 | 运费 | 总税 | 运费税 |
---|---|---|---|---|---|---|
S1 | T1 | 12 | 0 | 3 | 5.5 | 0.75 |
S1 | T2 | 27 | 4 | 3 | 5.5 | 0.75 |
S2 | T1 | 15 | 2.5 | 5 | 7 | 1.25 |
S2 | T2 | 10 | 2 | 5 | 7 | 1.25 |
考虑 SaleOrder 1,其中交易税 (0 + 4) 和交货税 (1.5) 等于 5.5,并且针对每笔交易过帐。我不需要 TotalTax 列,但我需要将 1.5 与它分开,然后除以每笔交易得出 0.75。
在 SaleOrder 2 中类似,其中交易税 (2 + 2.5) 和交货税 (2.5) 等于 7,并且针对每笔交易过帐。我需要将 2.5 与它分开,然后除以每笔交易得出 1.75。
有人可以帮助我吗?
解决方法
您需要从 total_tax
中减去税收列的总和,然后除以交易次数。使用窗口函数:
select t.*,(total_tax - sum(tax) over (partition by SaleOrder)) * 1.0 / count(*) over (partition by SaleOrder) as DeliveryChargeTax
from t;
Here 是一个 dbfiddle。