アプリ版:「スタンプのみでお礼する」機能のリリースについて

開発環境は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が作成可能でしたらご教授いただけますようよろしくお願い致します。

A 回答 (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.[品番]
    • good
    • 0

【親】と【子供】左外部結合して、品番でグループ化し、枝番をカウントして食べた回数を導出すればよいかと。



【親】が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句に指定してやる必要も有ります。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!