我有三张桌子:
Sales.SalesOrderHeader
:
SalesOrderID
(PK)OrderDate
TotalDue,SalesPersonID
Sales.SalesPerson
:
BusinessEntityID
(PK) 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
销售人员,所以我想忽略这一点,并总结每个销售人员2008年的销售额(总计TotalDue
) 。
到目前为止,这是我的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子句中。
所以有人可以帮我这个吗?非常感谢您的帮助。
答案 0 :(得分:1)
您需要按照选择中的所有非汇总列进行分组。
即:
group by p.BusinessEntityID, p.FirstName, p.LastName