Объединение трех таблиц с суммой в SQL Server - PullRequest
0 голосов
/ 19 марта 2012

У меня есть три таблицы:

  1. Sales.SalesOrderHeader:

    • SalesOrderID (PK)
    • OrderDate
    • TotalDue,SalesPersonID
    • ...
  2. Sales.SalesPerson:

    • BusinessEntityID (PK)
    • ...
  3. Person.Person:

    • BusinessEntityID (PK)
    • FirstName
    • LastName
    • ...

Таблица SalesPerson действует как ассоциированная сущность, которая вносит толькообщий PK (то же имя, что и в Person и имя SalesPersonID в SalesOrderHeader).

Теперь я хочу отобразить таблицу, подобную следующей:

   BusinessEntityID  FirstName  LastName  Total attributed sales
   ----------------  ---------  --------  ----------------------
1  285               Saeeed     Abbas     32323.88
2  287               Amy        Albert    1214323.98
…  …                 …          …         …

Естьнекоторые salesOrders с null продавцом, поэтому я хочу проигнорировать это и подвести итог продаж (суммировать TotalDue) за 2008 год каждым продавцом.

На данный момент это мой код T-SQL:

select
    SUM(s.TotalDue) as 'Total attributed sales',
    p.BusinessEntityID,
    p.FirstName,
    p.LastName
from Sales.SalesOrderHeader as s
right outer join Sales.SalesPerson as sp on s.SalesPersonID=sp.BusinessEntityID 
left outer join Person.Person as p on sp.BusinessEntityID=p.BusinessEntityID
where 
s.OrderDate between '2008-01-01 00:00:00.000' and '2008-12-31 23:59:59.999'
and SalesPersonID is not null
group
--Order 
by SalesOrderID, 
SalesPersonID

Синтаксических ошибок нет, но мой запрос не работает должным образом.

Ошибка SQL Serverсообщение выглядит как

Столбец Person.Person.BusinessEntityID 'недопустим в списке выбора, поскольку он не содержится ни в статистической функции, ни в предложении GROUP BY.

Так может ли кто-нибудь помочь мне в этом, пожалуйста?Ваша помощь очень ценится.

1 Ответ

1 голос
/ 19 марта 2012

Вам нужно сгруппировать по всем неагрегированным столбцам в выбранном вами.

т.е.:

group by p.BusinessEntityID, p.FirstName, p.LastName
...