2013-07-30 49 views
0

我試圖獲取銷售人員的數據w.r.t他們工作的區域。我正在使用Adventureworks數據庫表Employee,Contact,SalesPerson,SalesTerritory。 這裏是我的查詢:此查詢
SQL查詢不是將所有數據w.r.t都返回給域名

Select p.FirstName, p.LastName, h.EmployeeID, t.Name as "Territory Name" 
from Person.Contact p 
INNER JOIN HumanResources.Employee h ON p.ContactID = h.ContactID 
INNER JOIN Sales.SalesPerson s ON s.SalesPersonID = h.EmployeeID 
INNER JOIN Sales.SalesTerritory t ON s.TerritoryID = t.TerritoryID 

的問題是它的結果只有一個領地。不過,有銷售人員在多個領域工作......我需要結果所有人。

任何幫助,將不勝感激。

+0

你確保Sales.SalesPerson每個TerritoryID都有一個條目? –

+0

否不是所有SalesPerson都有每個地區ID的入口,但某些SalesPerson與1個或多個地區/ ID – Zelig

+0

有關聯哪個AdventureWorks數據庫?我有2008R2和表名不匹配。 –

回答

0

你必須是想知道員工在哪裏工作一段時間。據我在AdventureWorks2008和AdventureWorks2008R2中看到的,Sales.SalesPerson被分配一個TerritoryID,然後在Sales.SalesTerritoryHistory中,每個BusinessEntityID可以有多個TerritoryID。對於那些數據塊,使用:

select  p.FirstName 
      ,p.LastName 
      ,e.LoginID -- there is no EmployeeID in this version of AdventureWorks 
      ,st.Name      as [TerritoryName] 
from  Sales.SalesPerson    as sp 
join  Person.Person     as p 
on   p.BusinessEntityID = sp.BusinessEntityID 
join  HumanResources.Employee   as e 
on   e.BusinessEntityID = sp.BusinessEntityID 
join  Sales.SalesTerritoryHistory  as sth 
on   sth.BusinessEntityID = sp.BusinessEntityID 
join  Sales.SalesTerritory   as st 
on   sth.TerritoryID = st.TerritoryID 
-- keep the where clause if you want to find only current TerritoryIDs 
-- remove the where clause if you want to know all across time 
where  GETDATE() between sth.StartDate and isnull(sth.EndDate,'9999-1-1') 

明確的AdventureWorks數據庫的版本,我可以糾正錯誤(但不要說2012年,因爲我沒有安裝SQL Server 2012 :)

+0

我有AdventureWorks2008R2_RTM版本。是的,我錯過了提供我從SalesTerritoryHistory尋找salesPerson的詳細信息。我正在尋找的是具有以上所有信息並且銷售區域歷史記錄與其關聯的SalesPerson。 – Zelig

相關問題