在SQL Server中使用sum连接三个表

时间:2012-03-19 02:48:46

标签: sql-server-2008 join sum

我有三张桌子:

  1. Sales.SalesOrderHeader

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

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

    • BusinessEntityID(PK)
    • FirstName
    • LastName
    • ...
  4. SalesPerson的作用类似于关联实体,它只提供一个公共PK(与Person中的名称相同,并在SalesPersonID中命名为SalesOrderHeader)。

    现在我想显示如下表格:

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

    有一些salesOrdersnull销售人员,所以我想忽略这一点,并总结每个销售人员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子句中。

    所以有人可以帮我这个吗?非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您需要按照选择中的所有非汇总列进行分组。

即:

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