• ベストアンサー

SQLサーバー2000でのSQL文の質問です。

開発環境はSQLサーバー2000です。 下記のような親子関係のテーブルがあった場合に、【結果】のような結果を得れるようなSQL文を教えていただきたいです。 【親】 -------------------------------- |品番 |品名 -------------------------------- |1 |ラーメン -------------------------------- |2 |カレー -------------------------------- |3 |うどん -------------------------------- 【子供】 -------------------------------- |品番 |枝番 |食べた日 -------------------------------- |1 |1 |1/1 -------------------------------- |1 |2 |1/2 -------------------------------- |3 |1 |1/3 -------------------------------- |3 |2 |1/4 -------------------------------- |3 |3 |1/5 -------------------------------- |3 |4 |1/6 -------------------------------- 【結果】 親子テーブルを連結したSQLを実行すると -------------------------------- |品番 |品名 |食べた回数 -------------------------------- |1 |ラーメン|2 -------------------------------- |2 |カレー |0 -------------------------------- |3 |うどん |4 -------------------------------- のような結果が帰ってくるSQLが作成可能でしたらご教授いただけますようよろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

親テーブルと(子供テーブルを品番でGROUP BYしたもの)を外部結合してやればできます。 お試し DECLARE @親 TABLE  ( [品番] INT, [品名] NVARCHAR(8) ) DECLARE @子供 TABLE  ( [品番] INT, [枝番] INT, [食べた日] DATETIME ) INSERT INTO @親 ( [品番], [品名] )  VALUES ( 1, N'ラーメン' ) INSERT INTO @親 ( [品番], [品名] )  VALUES ( 2, N'カレー' ) INSERT INTO @親 ( [品番], [品名] )  VALUES ( 3, N'うどん' ) INSERT INTO @子供 ( [品番], [枝番], [食べた日] )  VALUES ( 1, 1, '2009-01-01' ) INSERT INTO @子供 ( [品番], [枝番], [食べた日] )  VALUES ( 1, 2, '2009-01-02' ) INSERT INTO @子供 ( [品番], [枝番], [食べた日] )  VALUES ( 3, 1, '2009-01-03' ) INSERT INTO @子供 ( [品番], [枝番], [食べた日] )  VALUES ( 3, 2, '2009-01-04' ) INSERT INTO @子供 ( [品番], [枝番], [食べた日] )  VALUES ( 3, 3, '2009-01-05' ) INSERT INTO @子供 ( [品番], [枝番], [食べた日] )  VALUES ( 3, 4, '2009-01-06' ) SELECT * FROM @親 SELECT * FROM @子供 SELECT  P.[品番] AS [品番],  P.[品名] AS [品名],  COALESCE(C.[回数], 0) AS [食べた回数] FROM  @親 AS P LEFT OUTER JOIN  (   SELECT    C.[品番] AS [品番],    COUNT(C.[枝番]) AS [回数]   FROM    @子供 C   GROUP BY C.[品番]  ) AS C  ON P.[品番] = C.[品番]

その他の回答 (1)

  • root139
  • ベストアンサー率60% (488/809)
回答No.2

【親】と【子供】左外部結合して、品番でグループ化し、枝番をカウントして食べた回数を導出すればよいかと。 【親】がparentテーブル、【子供】がchildテーブルという名前とした場合、下記のようになるかと。 ----------------------------------------------------------------- SELECT p.品番, p.品名, COUNT(c.枝番) AS 食べた回数 FROM parent p LEFT OUTER JOIN child c ON p.品番 = c.品番 GROUP BY p.品番, p.品名; ----------------------------------------------------------------- ちなみにSELECT選択列に含めるため、品名もGROUP BY句に指定してやる必要も有ります。

関連するQ&A