2017-01-29 62 views
0

我試圖讓使用下面的查詢每張發票的總金額可以使用,但我得到了以下錯誤:錯誤:窗功能無法在另一個窗口函數的上下文或聚合

Msg 4109, Level 15, State 1, Line 3 Windowed functions cannot be used in the context of another windowed function or aggregate.

查詢

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 
+1

請解釋一下你正在試圖完成的任務。請編輯您的問題並提供樣本數據和期望的結果。 –

+0

獲得每張發票的總額,例如發票#1總額30.00等 – Ayman

回答

2

正如錯誤消息中所述,您不能在sum集合內使用sum()over()聚合窗口函數。

嘗試使用派生表

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 

我想查詢可以通過增加樣本數據的結果得到改善,預計

+0

Msg 4104,Level 16,State 1,Line 17 無法綁定多部分標識符「SP.InvoiceNo」。 Msg 4104,Level 16,State 1,Line 18 無法綁定多部分標識符「SPD.Quantity」。 消息4104,級別16,狀態1,行19 無法綁定多部分標識符「SPD.UnitPrice」。 – Ayman

+0

@Ayman - 現在檢查..仍然相信您的查詢有邏輯錯誤,爲什麼不添加示例數據和預期結果 –

0

我相信你想是這樣的:

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; 

備註:

  • 總成本的計算是一個受過教育的猜測。從代碼中獲得計算的意圖幾乎是不可能的。
  • 您的GROUP BY列數太多。
  • 這個計算似乎不需要窗口函數。
+0

未給出正確金額 – Ayman

+1

@Ayman。 。 。正如我已經說過的那樣,編輯你的問題並提供樣本數據和期望的結果。你的代碼(也就是問題)沒有意義。 –

相關問題