Sql 错误:窗口函数不能在另一个窗口函数或聚合的上下文中使用

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

我试图使用以下查询获取每张发票的总金额,但出现以下错误:

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(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。正如我已经说过的,编辑您的问题并提供示例数据和期望的结果。您的代码(以及由此产生的问题)毫无意义。