SQL 查询挑战。除以返回 'Subquery returned more than 1 value.' 错误的子查询

SQL Query Challenge. Divide by Subquery returning 'Subquery returned more than 1 value.' error

我有以下table,其中我有两个销售订单,每个销售订单都有不同的交易数量。

SaleOrder Transaction Amount Tax Delivery Charge TotalTax (Including Tax of Delivery Charge)
S1 T1 12 0 3 5.5 (This also includes Tax in Column 4)
S1 T2 27 4 3 5.5
S2 T1 15 2.5 5 6
S2 T2 10 2 5 6

在每个 SaleOrder 中,我有不同数量的交易,并且每个交易在 amount 列中有不同的发票金额,在 tax 列中有每个交易的税。

在销售订单 1 中,我的运费为 6,我将其除以交易数量,每笔运费为 3。与销售订单 2 的情况类似,总运费为 10。

现在在 TotalTax 列中,我重复获取运费和交易的税金总和。

如何在 SQL 服务器中创建一个包含单独运费税的列,如下所示:

SaleOrder Transaction Amount Tax Delivery Charge TotalTax Delivery Charge Tax
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 中减去税收栏的总和,然后除以交易次数。使用 window 函数:

select t.*,
       (total_tax - sum(tax) over (partition by SaleOrder)) * 1.0 / count(*) over (partition by SaleOrder) as DeliveryChargeTax
from t;

Here 是一个 db<>fiddle.