主な質問
ステートメントを使用せずに、この質問全体に答えるには SQL ステートメントが必要Union
です。データベースで、関連付けられてAdventureWorks2014
いるストアを見つける必要がありますか? David Campbell
そして店名順に並び替えます。
このクエリは、店舗名と、選択した最初のアイテムとして最初/最後を表示する必要があります。このクエリは、さまざまなテーブルとその fk 依存関係の間の結合を使用して実行する必要があります。
外部キー関係のない結合テーブルを含めてはなりません。
私が試したこと
このクエリを実行して、ストアに関連するスキーマ ID とオブジェクト ID を取得しました。
Select
object_name(t.object_id), Schema_name(t.schema_id), t.name, c.name
From
sys.tables t
Join
sys.columns c on t.object_id = c.object_id
Where
t.name like '%Store%'
or c.name like'%Store%'
これにより、参加できる関心のある特定のテーブルを特定できました。Sales.Customer
FK 名StoreID
&を持つテーブル、およびcolumn を持つPersonID
テーブル。Sales.Store
StoreName
そこから、fk の依存関係を調べて、 table で姓名を見つけましたPerson.Person
。私は運がないこのクエリを試しました:
Select
s.name StoreName, p.FirstName, p.LastName
From
sales.customer c
Join
person.person p On c.personID = p.businessentityID
Join
sales.store s on s.businessentityID = p.businessEntityID
Where
p.FirstName Like ‘%David%’
and p.LastName Like ‘%Campbell%’
Order by
s.Name
問題
残念ながら、どのストアが に関連付けられているかを特定することはできないようですDavid Campbell
。結合が正しくないことはわかっていますが、「On」句とテーブルを正しくリンクして、fk の依存関係に基づいて正しい結果を生成する方法がわかりません。
これを実行すると、person.person の 2 つのレコードが関連付けられていることがわかります。
Select *
From Person.Person
Where p.FirstName Like '%David%'
and p.LastName Like '%Campbell%'
BusinessentityID
これにより、表の「David Campbell」に関連付けられている の 283 と 609 が返されますPerson.Person
が、これらの ID を David に関連付けられている店舗名にリンクする方法がわかりません。
基本的に、クエリが結果を返さない原因となっている結合が具体的にわかりません。必要に応じて、試したことに関する詳細情報を含めることができます。
ヒントとフィードバックを探しています。
ありがとう!
編集:
私の元のアプローチがオフになっているようです。Sales.Store の外部キーから始めて、そこから別のルートに進みました。また、"David Campbell" に関連付けられた店舗をカウントする Windows 関数を追加し、名前のない店舗を説明するために where 句に null パラメーターを追加しました。
ここに私の最終結果があります:
select
s.Name StoreName, p.FirstName, p.LastName,
count(s.BusinessEntityID) Over(Partition by s.salespersonId) as TotalStoresAssociatedWithDavidCampbell --<38 records show a "David Campbell"
from
Sales.Store s
join
Sales.SalesPerson sp on s.SalesPersonID = sp.BusinessEntityID
Join
Person.BusinessEntity be on sp.BusinessEntityID = be.BusinessEntityID
Join
Person.Person p on p.BusinessEntityID = be.BusinessEntityID
where
p.FirstName like '%David%'
and p.LastName Like '%Campbell%'
or s.Name is null
order by s.Name
ただし、これが元の質問に対する正しい答えであるかどうかはわかりません。そうだと思いますが、確信が持てたなら、もっと気分が良くなるでしょう。