SQL 查询挑战除以子查询返回“子查询返回的值超过 1”错误

问题描述

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

销售订单 交易 金额 运费 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。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...