0

営業担当者の勤務地域に関するデータを取得しようとしています。Adventureworks データベース テーブルの Employee、Contact、SalesPerson、SalesTerritory を使用しています。これが私のクエリです:

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 

このクエリの問題は、正確に 1 つのテリトリーが返されることです。しかし、複数の地域で働く営業担当者がいます... すべての地域で結果を出す必要があります。

これに関するヘルプをいただければ幸いです。

4

1 に答える 1

0

従業員が時間の経過とともにどこで働いていたかを知りたいという意味である必要があります。AdventureWorks2008 と AdventureWorks2008R2 で確認できる限り、Sales.SalesPerson には 1 つの TerritoryID が割り当てられ、Sales.SalesTerritoryHistory では、BusinessEntityID ごとに複数の TerritoryID が存在する可能性があります。これらの DB には、これを使用します。

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 DB のバージョンを明確にすると、エラーを修正できます (ただし、2012 とは言わないでください。SQL Server 2012 をインストールしていないからです :)

于 2013-07-30T22:59:16.040 に答える