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.
我有以下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.