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

问题描述

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

销售订单 交易 金额
S1 T1 20
S1 T2 20
S2 T1 15
S2 T2 15
S2 T3 15

问题是我根据 sql Server 表中的每个事务获取总销售订单金额,而实际上它们需要在事务数量之间平均分配,如下所示:

销售订单 交易 金额
S1 T1 10
S1 T2 10
S2 T1 5
S2 T2 5
S2 T3 5

我编写了以下查询

SELECT SalesOrder,Transaction,Max(Amount) / (SELECT COUNT(Transaction) AS Transaction FROM Test_Table GROUP BY SalesOrder)
    FROM Test_Table
    GROUP BY SalesOrder,Transaction

但它给了我'子查询返回的值超过 1。当子查询跟随 =,!=,<,<=,>,>= 或子查询用作表达式时,这是不允许的。错误。有人能解释一下这是什么以及如何纠正这个错误吗?

解决方法

我认为你不需要 group by,只是窗口函数:

SELECT SalesOrder,Transaction,Amount) / COUNT(*) OVER (PARTITION BY salesorder)
FROM Test_Table;
,

因为在子查询中你 GROUP BY SalesOrder 它为每个 SalesOrder 返回 1 行。
但您需要特定 SalesOrder 的交易数量。
使用 MAX() 和 COUNT() 窗口函数:

SELECT DISTINCT SalesOrder,MAX(Amount) OVER (PARTITION BY SalesOrder,Transaction) / 
       COUNT(*) OVER (PARTITION BY SalesOrder)
FROM Test_Table

如果 Amount 列的数据类型为 INTEGER,那么 SQL Server 将执行整数除法,因此您可能需要先乘以 1.0,以便得到带有小数位的正确结果:

SELECT DISTINCT SalesOrder,1.0 * MAX(Amount) OVER (PARTITION BY SalesOrder,Transaction) / 
       COUNT(*) OVER (PARTITION BY SalesOrder)
FROM Test_Table 
,

试试这个

SELECT SaleOrder,[Transaction],Max(Amount) / COUNT([Transaction]) over (partition by SaleOrder)
FROM Test_Table GROUP BY SaleOrder,[Transaction]