2017-05-07 2 views
0

Ich führe diese Abfrage im Grunde Wort für Wort aus dem Buch.Unterschied zwischen Standardpreis und dem durchschnittlichen Gesamtpreis aller Produkte

Geben Sie eine Auflistung aller Produkte an, die den Unterschied zwischen dem Standardpreis und dem durchschnittlichen Gesamtpreis aller Produkte enthalten.

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

Ich erhalte diese Fehlermeldung:

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

+0

Ihr Fehler ist ein SQL Server-Fehler; Markieren Sie nur die Datenbank, die Sie wirklich verwenden. –

Antwort

2

Ihre spezifischen Fehler ist, weil Sie keinen Tabellen Alias ​​haben. Ich verabscheue auch Kommas in der FROM Klausel, so:

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

Allerdings ist der beste Weg, um diese Frage zu beantworten, ist Fensterfunktionen zu verwenden:

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

Das hat funktioniert. Vielen Dank. –

+0

Bitte erläutern Sie, was das Komma (oder Cartesian Joins) in der FROM-Klausel darstellt. –

+0

@ Clifton_h. . . Wenn Sie eine Frage haben, sollten Sie sie als Frage stellen, nicht in einem Kommentar. Ich denke jedoch, dass jedes SQL-Tutorial oder jede Datenbankdokumentation kartesische Produkte abdeckt. –

Verwandte Themen