- ベストアンサー
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が作成可能でしたらご教授いただけますようよろしくお願い致します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
親テーブルと(子供テーブルを品番で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)
【親】と【子供】左外部結合して、品番でグループ化し、枝番をカウントして食べた回数を導出すればよいかと。 【親】が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句に指定してやる必要も有ります。