2017-05-07 29 views
0

我從書中基本上逐字運行此查詢。標準價格與所有產品的整體平均標準價格之間的差異

提供包括所有產品的標準價格和總體平均標準價格之間的差異的所有產品的列表。

SELECT ProductStandardPrice – PriceAvg AS Difference 
FROM Product_T, (SELECT AVG(ProductStandardPrice) AS PriceAvg 
FROM Product_T); 

我不斷收到此錯誤:

Msg 102, Level 15, State 1, Line 3 Incorrect syntax near ';'.

+0

你的錯誤是SQL Server錯誤;只使用您實際使用的數據庫進行標記。 –

回答

2

你特定的錯誤是因爲你沒有一個表的別名。我也痛恨逗號FROM子句中,所以:

SELECT (t.ProductStandardPrice – a.PriceAvg) AS Difference 
FROM Product_T t CROSS JOIN 
    (SELECT AVG(ProductStandardPrice) AS PriceAvg 
     FROM Product_T 
    ) a; 

然而,要回答這個問題的最好辦法是使用窗口功能:

SELECT (t.ProductStandardPrice – AVG(t.ProductStandardPrice) OVER() 
     ) AS Difference 
FROM Product_T t ; 
+0

工作。謝謝。 –

+0

請解釋逗號(或笛卡爾連接)在FROM子句中表示什麼。 –

+0

@clifton_h。 。 。如果你有問題,你應該問這是一個問題,而不是評論。但是,我認爲任何SQL教程或數據庫文檔都涵蓋笛卡爾產品。 –

相關問題