2014-01-13 3 views
0

В базе данных AdventureWorks2012, я должен написать запрос, который содержит все столбцы из таблицы Sales.SalesOrderHeader и средней LineTotal из таблицы Sales.SalesOrderDetailSubquery Group By п

Покушение 1

SELECT * 
FROM Sales.SalesOrderHeader 
    (SELECT AVG (LineTotal) 
    FROM Sales.SalesOrderDetail 
    WHERE LineTotal <> 0) 
GROUP BY LineTotal 

я получаю следующее сообщение об ошибке:

Msg 156, Level 15, State 1, Line 3 
Incorrect syntax near the keyword 'SELECT'. 
Msg 102, Level 15, State 1, Line 5 
Incorrect syntax near ')'. 

Покушение 2

SELECT * 
FROM Sales.SalesOrderHeader h 
    JOIN (
    SELECT AVG(LineTotal) 
    FROM Sales.SalesOrderDetail d 
    GROUP BY LineTotal) AS AvgLineTotal 
ON d.SalesOrderID = h.SalesOrderID 

я получаю следующее сообщение об ошибке:

Msg 8155, Level 16, State 2, Line 7 
No column name was specified for column 1 of 'AvgLineTotal'. 
Msg 4104, Level 16, State 1, Line 7 
The multi-part identifier "d.SalesOrderID" could not be bound. 

подзапросы очень запутанные для меня. Что я делаю не так? Благодарю.

+5

Давай, ты будешь просить для всех ваших заданий ?. http://stackoverflow.com/questions/21096582/sql-subqueries-errors, http://stackoverflow.com/questions/20501110/sql-total-quanity-purchased-by-year, http://stackoverflow.com/ вопросы/20499184/sql-total-amount-and-sum – Lamak

ответ

1

Ну, вы смешиваете свои псевдонимы и некоторые другие вещи.

Вторая версия должна выглядеть, что

SELECT h.*, d.avgLineTotal 
FROM Sales.SalesOrderHeader h 
    JOIN (
    SELECT SalesOrderID, --you need to get this to make a join on it 
    AVG(LineTotal)as avgLineTotal --as stated by error, you have to alias this (error 1) 
    FROM Sales.SalesOrderDetail 
    GROUP BY SalesOrderID) d --this will be used as subquery alias (error 2) 
ON d.SalesOrderID = h.SalesOrderID 

другое решение будет

select h.field1, h.field2, -- etc. all h fields 
coalesce(AVG(sod.LineTotal), 0) 
from Sales.SalesOrderHeader h 
LEFT JOIN Sales.SalesOrderDetail d on d.SalesOrderID = h.SalesOrderID 
GROUP BY h.field1, h.field2 --etc. all h fields 
+0

благодарю вас за помощь. – user3047713

Смежные вопросы