購買および仕入先のシナリオ
Adventure Works Cycles では、Adventure Works Cycles 社製自転車の製造に使用される原材料と部品を購買部門が購入します。Adventure Works Cycles は、自転車用衣料品および水筒や空気入れなどの自転車の付属品など、再販用の製品も購入します。これらの製品および製品を購入する仕入先に関する情報は、AdventureWorks サンプル データベースに格納されます。
このトピックでは、サンプル データベースで表される仕入先、主な仕入先関連テーブルのスキーマ図、および共通のテーブル リレーションシップを示すサンプル クエリの詳細について説明します。
Vendor テーブルと Purchasing テーブル
次の表に、これらのテーブルに格納されるデータの簡単な説明を示します。
Schema.Table |
格納されるデータの内容 |
コメント |
---|---|---|
すべての顧客の住所情報。 顧客の住所は、複数存在することがあります。たとえば、顧客の請求先住所と発送先住所が異なる場合があります。 |
結合テーブルである VendorAddress は、仕入先を各住所にマップします。 Address テーブルにも Adventure Works Cycles の従業員と顧客の住所情報が含まれています。 |
|
Adventure Works Cycles 購買担当者が製品を発注する際に使用する仕入先の従業員氏名。 仕入先には、複数の連絡先が存在することがあります。たとえば、販売担当者と販売責任者が存在する場合が考えられます。このような場合、Adventure Works Cycles 購買担当者は、販売担当者を第 1 の顧客連絡先とし、販売責任者を第 2 の連絡先として使用することができます。 |
結合テーブルである VendorContact は、連絡先を仕入先にマップします。 列 AdditionalContactInfo には、その連絡先に固有の追加の電話番号 (携帯電話、FAX など) に関するデータが含まれます。この列は、xml データ型です。詳細については、「XML 列 Contact.AdditionalContactInfo について」を参照してください。 |
|
仕入先が供給する製品に、仕入先をマップします。 1 つの製品が複数の仕入先から供給されたり、1 つの仕入先が複数の製品を供給したりする場合があります。 |
|
|
発注された製品、量、および単価など、購買発注の詳細。 |
|
|
合計支払額、発注日、注文の状態など、購買発注の概要。 |
PurchaseOrderHeader テーブルおよび PurchaseOrderDetail テーブルを両方使用して、マスタと詳細のリレーションシップを作成します。 |
|
標準の製品発送方法を管理するために使用される参照テーブル。 |
ShipMethodID 列は、PurchaseOrderHeader テーブルに含まれています。 |
|
仕入先の名前やアカウント番号など、仕入先に関する詳細。 |
|
|
Address テーブル内の住所情報を顧客にリンクします。 |
住所は、請求先、住所、発送先などのタイプ別に分類されます。AddressTypeID 列は、AddressType テーブルにマップされます。 |
|
すべての顧客の住所情報。 顧客の住所は、複数存在することがあります。たとえば、顧客の請求先住所と発送先住所が異なる場合があります。 |
これは結合テーブルです。詳細については、Contact および Vendor の各テーブルのトピックを参照してください。 |
例
次のクエリを使用し、購入および仕入先データを表示することによって、購入テーブルと仕入先テーブルのリレーションシップについて詳細に理解することができます。
A. 仕入先の表示 (場所別)
次の例では、仕入先とその住所の一覧が表示されます。
USE AdventureWorks;
GO
SELECT V.VendorID, V.Name AS Vendor, A.AddressLine1, A.AddressLine2, A.City, SP.Name AS State, CR.Name AS Country
FROM Purchasing.Vendor AS V
JOIN Purchasing.VendorAddress AS VA ON VA.VendorID = V.VendorID
JOIN Person.Address AS A on A.AddressID = VA.AddressID
JOIN Person.StateProvince AS SP on SP.StateProvinceID = A.StateProvinceID
JOIN Person.CountryRegion AS CR ON CR.CountryRegionCode = SP.CountryRegionCode
GROUP BY V.VendorID, V.Name, A.AddressLine1, A.AddressLine2, A.City, SP.Name, CR.Name
ORDER BY V.VendorID;
GO
B. 仕入先によって供給された製品の表示
次の例では、仕入先が Adventure Works Cycles に供給する製品の一覧が表示されます。
USE AdventureWorks;
GO
SELECT P.ProductNumber, P.Name AS Product, V.Name AS Vendor, PV.LastReceiptCost
FROM Production.Product AS P
JOIN Purchasing.ProductVendor AS PV ON P.ProductID = PV.ProductID
JOIN Purchasing.Vendor AS V ON V.VendorID = PV.VendorID
ORDER BY P.Name ;
GO
C. 仕入先の連絡先の表示 (仕入先別)
次の例では、仕入先の連絡先の一覧が表示されます。仕入先の連絡先は、Adventure Works Cycles 購買部門の従業員が部品や製品を注文するためのやり取りを行う仕入先の従業員です。
GO
SELECT V.Name as Vendor, C.FirstName, C.LastName, CT.Name AS Title
FROM Person.Contact AS C
JOIN Purchasing.VendorContact VC ON C.ContactID = VC.ContactID
JOIN Person.ContactType CT ON CT.ContactTypeID = VC.ContactTypeID
JOIN Purchasing.Vendor V ON V.VendorID = VC.VendorID
ORDER BY V.Name;
GO
D. 購入の表示 (仕入先別)
次の例では、仕入先、および仕入先に関連付けられている購買発注が表示されます。
USE AdventureWorks;
GO
SELECT V.Name AS Vendor, SUM(PH.TotalDue)AS [Total Purchase],
AVG(PH.TotalDue)AS [Average Purchase], MIN(PH.TotalDue)
AS [Minimum Purchase], MAX(PH.TotalDue)AS [Maximum Purchase]
FROM Purchasing.Vendor AS V
JOIN Purchasing.PurchaseOrderHeader AS PH ON V.VendorID = PH.VendorID
GROUP BY V.Name
ORDER BY V.Name;
GO