私はSQL学習を始めたばかりで、オンラインでいくつかの練習問題をやっています。 私は(ページ上の#11)、ここでこの問題に出くわした:http://sqlzoo.net/wiki/AdventureWorks_hard_questionsSQL:条件に基づいて同じデータソースから2つの列を作成する方法は?
ここでは、この問題のために使用される3つのテーブルのスキーマがあります:
CustomerAW(得意先、姓、MiddleName、姓、会社名、EmailAddressのは)
CustomerAddress(得意先、あるAddressId、AddressTypeに)
住所(追加しますressID、住所1、住所2、市、はStateProvince、CountyRegion、郵便番号)
そして質問です:
すべての顧客のためにダラスショー「本社」の住所1と住所1の中に「本社」で「配送先」住所 - 配送先住所がない場合は空白のままにします。顧客あたり1行を使用します。以下は
そうに私のコードです:
以下SELECT CustomerID, AddressType, AddressLine1
FROM CustomerAW
JOIN CustomerAddress
USING (CustomerID)
JOIN Address
USING (AddressID)
WHERE AddressType IN 'Main Office'
AND City = 'Dallas'
;
は、私が手に出力されます:
Result:
CustomerID AddressType AddressLine1
112 Main Office P.O. Box 6256916
130 Main Office Po Box 8259024
165 Main Office 2500 North Stemmons Freeway
201 Main Office Po Box 8035996
256 Main Office 99828 Routh Street, Suite 825.
しかし、私は別の列に配送先住所を表示する方法がわかりません。 となり、ヘッダーは "CustomerID、AddressType、MainOfficeAddress、ShippingAddress"になります。この問題に記載されているように、配送先住所がない場合は空白のままにしてください。 "ビュー" を使用せずにこれを行う方法
更新
?私は、私はそれらのいずれかがでサブクエリを書くことで、まあ、私はこれを達成するためのさまざまな方法を試してみた
を試してみました
何...私は、ビューを作成することはできませんでテストしていますウェブサイトSELECTステートメント:
SELECT c.CustomerID,
(
SELECT a.AddressLine1 FROM Address a
JOIN CustomerAddress ca
USING (AddressID)
WHERE ca.AddressType = 'Main Office'
) AS MainOfficeAddress
FROM CustomerAW c
;
しかし、「サブクエリは1行以上を返します」というエラーが表示されます。
SELECT c.CustomerID, b.AddressLine1, e.AddressLine1
FROM CustomerAW c
JOIN
(
SELECT * FROM CustomerAddress ca
JOIN Address a
USING (AddressID)
WHERE ca.AddressType IN 'Main Office'
) AS b
USING (CustomerID)
JOIN
(
SELECT * FROM CustomerAddress ca
JOIN Address a
USING (AddressID)
WHERE ca.AddressType IN 'Shipping'
) AS e
USING (CustomerID)
;
そして:私はまた、以下のようなもの(それらのどれも実際に動作していない)試した
SELECT c.CustomerID, AddressType, AddressLine1 AS MainOfficeAddress,
(
SELECT a.AddressLine1 FROM Address a
JOIN CustomerAddress ca USING (AddressID)
WHERE ca.CustomerID IN c.CustomerID
AND ca.AddressType = 'Shipping'
) AS ShippingAddress
FROM CustomerAW c
JOIN CustomerAddress ca
USING (CustomerID)
JOIN Address
USING (AddressID)
WHERE ca.AddressType IN ('Main Office')
AND City = 'Dallas'
;
をすべてのヘルプは大歓迎です!私は愚かな質問をしていないことを願っています。
こんにちはTanuj、答えるためにどうもありがとうございます!私は "ビュー"を使ってこのwitoutをどうやって達成できるのか尋ねてもよろしいですか?また、最初に "ビュー"を使用してヒアリングをすると、あなたはビューを少し拡大できますか?私は、あなたがビューを「見る」ためにもっと多くのものを考えていましたが、クエリでは使用されませんでした。 – alwaysaskingquestions
ビューは仮想テーブルであり、実際のテーブルを参照しています。いくつかのデータを格納します。ビューが宣言されると、それはテーブルのように使用できます。 –
私は参照してください。新しいテーブルを作成したり、サブクエリを使用したりするために、代わりにここでビューを使用しています。ビューは一時的にメモリに保存され、次にプルしようとすると次回は表示されません。私はそれを正しく理解していますか? – alwaysaskingquestions