2016-12-19 8 views
0

Я хочу отобразить имя клиента, если общая цена выше средней цены за каждую транзакцию. Но сообщение об ошибке «Столбец x.average» недопустим в предложении HAVING, потому что он не содержится ни в агрегатной функции, ни в предложении GROUP BY ». и я не знаю, где проблемы.Как отобразить имя клиента для каждой транзакции с общей ценой выше средней цены?

Вот мой код

SELECT c.CustomerId, 
     hs.TransactionId, 
     c.CustomerName, 
     SUM(t.Price) AS [Total Price] 
FROM MsCustomer c JOIN HeaderSalonServices hs 
ON c.CustomerId = hs.CustomerId 
JOIN DetailSalonServices ds 
ON ds.TransactionId = hs.TransactionId 
JOIN MsTreatment t 
ON t.TreatmentId = ds.TreatmentId, 
(SELECT AVG(Price) AS average 
FROM MsTreatment) AS x 
GROUP BY c.CustomerId, hs.TransactionId, c.CustomerName 
HAVING SUM(t.Price) > average 
+0

среднее определяется только внутри подзапроса, а просто использовать переименованный «х». ;-) – flowtron

+0

См. Http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple -SQL-запрос – Strawberry

ответ

1

Попробуйте переместить подзапрос в HAVING предложении:

SELECT c.CustomerId, 
     hs.TransactionId, 
     c.CustomerName, 
     SUM(t.Price) AS [Total Price] 
FROM MsCustomer c JOIN HeaderSalonServices hs 
ON c.CustomerId = hs.CustomerId 
JOIN DetailSalonServices ds 
ON ds.TransactionId = hs.TransactionId 
JOIN MsTreatment t 
ON t.TreatmentId = ds.TreatmentId 
GROUP BY c.CustomerId, hs.TransactionId, c.CustomerName 
HAVING SUM(t.Price) > (SELECT AVG(Price) AS average FROM MsTreatment)