【问题标题】:SQL Query Challenge. Divide by Subquery returning 'Subquery returned more than 1 value.' errorSQL 查询挑战。除以返回“子查询返回超过 1 个值”的子查询。错误
【发布时间】:2020-12-30 12:17:25
【问题描述】:

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

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 中,我有不同数量的交易,并且每笔交易在金额栏中有不同的发票金额加上税款栏中每笔交易的税款。

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

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

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

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。

有人可以帮我解决这个问题吗?

【问题讨论】:

  • 欢迎来到 SO。你能告诉我们你到目前为止尝试了什么吗?产生错误的查询是什么。
  • MySQL SQL Server。标记您实际使用的数据库引擎。最有可能为您的very similar previous question 提出的相同解决方案适用于此处。

标签: sql sql-server database business-intelligence


【解决方案1】:

您需要从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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-23
    • 2013-10-24
    • 1970-01-01
    相关资源
    最近更新 更多