Sql 错误:窗口函数不能在另一个窗口函数或聚合的上下文中使用
我试图使用以下查询获取每张发票的总金额,但出现以下错误: Msg 4109,第15级,状态1,第3行 窗口函数不能在另一个窗口函数或聚合的上下文中使用 查询Sql 错误:窗口函数不能在另一个窗口函数或聚合的上下文中使用,sql,sql-server,Sql,Sql Server,我试图使用以下查询获取每张发票的总金额,但出现以下错误: Msg 4109,第15级,状态1,第3行 窗口函数不能在另一个窗口函数或聚合的上下文中使用 查询 SELECT SP.InvoiceNo, Sum(CAST((SPD.Quantity * SPD.UnitPrice) / (SUM(SPD.Quantity * SPD.UnitPrice) OVER ()) * Sp.Shipping_Cost + (SPD.Quantity * SPD.UnitPrice) / (SUM(S
SELECT
SP.InvoiceNo,
Sum(CAST((SPD.Quantity * SPD.UnitPrice) / (SUM(SPD.Quantity * SPD.UnitPrice) OVER ()) * Sp.Shipping_Cost + (SPD.Quantity * SPD.UnitPrice) / (SUM(SPD.Quantity * SPD.UnitPrice) OVER ()) * Sp.Customs_Cost + SPD.Quantity * SPD.UnitPrice - (SPD.Discount / 100) * SPD.Quantity * SPD.UnitPrice AS decimal(10, 2))) AS [Total Amount]
FROM dbo.Stock_Purchase SP
INNER JOIN dbo.Stock_Purchase_Details SPD
ON SP.Purchase_ID = SPD.Purchase_ID
INNER JOIN dbo.Store S
ON SPD.Pro_ID = S.Pro_ID
group by SP.InvoiceNo,SPD.Quantity,SPD.UnitPrice
我相信你想要这样的东西:
SELECT SP.InvoiceNo,
SUM(SPD.Quantity * SPD.UnitPrice * (1 - SP.Discount)) + sp.Shipping_Cost as Total_amount
FROM dbo.Stock_Purchase SP INNER JOIN
dbo.Stock_Purchase_Details SPD
ON SP.Purchase_ID = SPD.Purchase_ID INNER JOIN
dbo.Store S
ON SPD.Pro_ID = S.Pro_ID
GROUP BY SP.InvoiceNo, sp.Shipping_Cost;
注:
- 总成本的计算是有根据的猜测。从代码中获得计算的意图几乎是不可能的
- 您的
的列太多分组依据
- 这种计算似乎不需要窗口函数
- 我相信你想要这样的东西:
SELECT SP.InvoiceNo,
SUM(SPD.Quantity * SPD.UnitPrice * (1 - SP.Discount)) + sp.Shipping_Cost as Total_amount
FROM dbo.Stock_Purchase SP INNER JOIN
dbo.Stock_Purchase_Details SPD
ON SP.Purchase_ID = SPD.Purchase_ID INNER JOIN
dbo.Store S
ON SPD.Pro_ID = S.Pro_ID
GROUP BY SP.InvoiceNo, sp.Shipping_Cost;
注:
- 总成本的计算是有根据的猜测。从代码中获得计算的意图几乎是不可能的
- 您的
的列太多分组依据
- 这种计算似乎不需要窗口函数
sum
aggregate中使用sum()over()
aggregate窗口函数
尝试使用派生表
SELECT InvoiceNo,
Sum(Cast(( sales ) / ( total_sales ) * Shipping_Cost + ( sales ) / ( total_sales ) * Customs_Cost + sales - ( Discount / 100 ) * sales AS DECIMAL(10, 2))) AS [Total Amount]
FROM (SELECT SP.InvoiceNo,
Sp.Shipping_Cost,
Sp.Customs_Cost,
SPD.Quantity,
SPD.UnitPrice,
Sum(SPD.Quantity * SPD.UnitPrice)
OVER() AS total_sales,
SPD.Discount,
SPD.Quantity * SPD.UnitPrice AS sales
FROM dbo.Stock_Purchase SP
INNER JOIN dbo.Stock_Purchase_Details SPD
ON SP.Purchase_ID = SPD.Purchase_ID
INNER JOIN dbo.Store S
ON SPD.Pro_ID = S.Pro_ID) a
GROUP BY InvoiceNo,
Quantity,
UnitPrice
我想通过添加示例数据和预期结果可以改进查询如错误消息中所述,您不能在
sum
aggregate中使用sum()over()
aggregate窗口函数
尝试使用派生表
SELECT InvoiceNo,
Sum(Cast(( sales ) / ( total_sales ) * Shipping_Cost + ( sales ) / ( total_sales ) * Customs_Cost + sales - ( Discount / 100 ) * sales AS DECIMAL(10, 2))) AS [Total Amount]
FROM (SELECT SP.InvoiceNo,
Sp.Shipping_Cost,
Sp.Customs_Cost,
SPD.Quantity,
SPD.UnitPrice,
Sum(SPD.Quantity * SPD.UnitPrice)
OVER() AS total_sales,
SPD.Discount,
SPD.Quantity * SPD.UnitPrice AS sales
FROM dbo.Stock_Purchase SP
INNER JOIN dbo.Stock_Purchase_Details SPD
ON SP.Purchase_ID = SPD.Purchase_ID
INNER JOIN dbo.Store S
ON SPD.Pro_ID = S.Pro_ID) a
GROUP BY InvoiceNo,
Quantity,
UnitPrice
我想可以通过添加示例数据和预期结果来改进查询请解释您试图实现的目标。请编辑您的问题并提供示例数据和所需结果。获取每张发票的总额例如发票#1总金额30.00等请解释您试图实现的目标。请编辑您的问题,并提供示例数据和所需结果。获取每张发票的总额,例如发票#1总金额30.00 etcMsg 4104,16级,状态1,第17行无法绑定多部分标识符“SP.InvoiceNo”。Msg 4104,级别16,状态1,第18行无法绑定多部分标识符“SPD.Quantity”。Msg 4104,级别16,状态1,第19行无法绑定多部分标识符“SPD.UnitPrice”。@Ayman-立即检查。。我仍然相信您的查询存在逻辑错误,为什么不添加示例数据和预期结果MG 4104,16级,状态1,第17行多部分标识符“SP.InvoiceNo”无法绑定。Msg 4104,级别16,状态1,第18行无法绑定多部分标识符“SPD.Quantity”。Msg 4104,级别16,状态1,第19行无法绑定多部分标识符“SPD.UnitPrice”。@Ayman-立即检查。。我仍然相信你的查询有逻辑错误,为什么不添加示例数据和期望值呢result@Ayman . . . 正如我已经说过的,编辑您的问题并提供示例数据和期望的结果。你的代码(以及由此产生的问题)毫无意义。@Ayman。正如我已经说过的,编辑您的问题并提供示例数据和期望的结果。您的代码(以及由此产生的问题)毫无意义。