1

次のデータを含むテーブル Orgs があります。

ID   Name            AddressID
0    McDonalds          4
1    Starbucks          5
2    Burger King        7

次のデータを含むテーブル Addresses もあります。

ID   OrgID   Address
3     0      123 Main St.
4     0      456 East Ave.
5     1      789 Young St.
6     2      5 Riverside Dr.
7     2      8 Lakeview Ave.

Orgs テーブルとその住所から会社の名前を選択する select ステートメントを作成する必要があります。Orgs テーブル内の会社は、1 つ以上の住所を持つことができます。会社の住所が 1 つしかない場合、その会社の住所を返したくありません。会社に複数の住所がある場合、Orgs.AddressID = Addresses.ID の住所を返したい

したがって、私の結果は次のようになります。

ID   Name         Address
0    McDonalds    456 East Ave.
1    Starbucks
2    Burger King  8 Lakeview Ave.

これを行う方法がわかりません。ご協力いただきありがとうございます!

4

3 に答える 3

1

動作するデモでの SQL フィドル

SELECT O.ID, O.Name, IsNull(A.addr, '') as Address
FROM Org O
LEFT JOIN 
(
  SELECT OrgID 
  FROM Address 
  GROUP BY OrgID 
  HAVING COUNT(*) > 1
) c 
  ON O.ID = c.OrgID
LEFT JOIN Address A 
  ON c.OrgID = A.OrgID 
  AND O.AddressID = A.ID
于 2012-05-25T15:33:30.940 に答える
1
SELECT 
    O.ID, O.Name, A.Address
FROM 
    Orgs O
LEFT OUTER JOIN 
    (SELECT OrgID FROM Addresses GROUP BY OrgID HAVING COUNT(*) > 1) X ON O.ID = X.OrgID
LEFT OUTER JOIN 
    Addresses A ON X.OrgID = A.OrgID AND O.AddressID = A.ID
于 2012-05-25T15:30:13.033 に答える
0

データ自体がないと難しいですが、こんな感じでしょうか?

SELECT 
    orgs.OrgID
,   orgs.Name
,   CASE 
        WHEN OrgCount > 1 THEN ad.Address
        ELSE '' 
    END AS Address
FROM        
(
    SELECT 
        OrgID
    ,   Name
    ,   COUNT(*) AS OrgCount
    FROM 
    Orgs
) orgs
INNER JOIN 
Addresses ad
    ON 
    ad.AddressID = orgs.AddressID 
GROUP BY 
    orgs.OrgID
,   orgs.Name
,   CASE 
        WHEN OrgCount > 1 THEN ad.Address
        ELSE '' 
    END AS Address
于 2012-05-25T15:31:17.803 に答える