2012-03-19 36 views
0

我有三個表:加入三個表的額頭在SQL Server

  1. Sales.SalesOrderHeader

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

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

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

SalesPerson的作用就像一個聯營實體,它不僅有助於共同PK(相同的名稱和Person命名爲SalesOrderHeaderSalesPersonID)。

現在我想顯示一個表如下所示:

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

有一些salesOrdersnull銷售人員,所以我想忽略,並總結銷售(總結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的錯誤消息類似於

列,因爲它不是在聚合函數或GROUP BY子句中包含「Person.Person.BusinessEntityID」在選擇列表中無效。

所以有人能幫助我嗎?非常感謝您的幫助。

回答

1

您需要按選擇中的所有非聚合列進行分組。

即:

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

感謝那些工作!但是我發現個人銷售員的訂單總額並沒有總和。相反,當我通過姓氏使用訂單時,我發現這些重複的銷售人員姓名。你能幫我進一步請 – 2012-03-19 03:19:58

+0

你應該不需要加入SalesPerson,因爲你說它只是一個關聯表。您正在執行的分組順序也很重要。在這種情況下,您不需要按SalesOrderID或SalesPersonID進行分組,因爲您只選擇BusinessEntityID。 – hkf 2012-03-19 03:26:16

+0

這真的是它的釘子!非常感謝! – 2012-03-19 03:38:47