• ベストアンサー

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

  • SQL文の副問合わせについて

    いつも勉強させて頂いています。 SQLの副問合わせでわからないところが出て来ましたので、教えて頂けると助かります。 <環境> VB 2008 SQLSERVER 2005 <内容> 金額の集計をしたいのですが。 テーブルA 品番(主キー) 品名 予測金額 テーブルB 品番(キー)  品名 確定金額 テーブルAの品番に対してテーブルBのレコードが1対多の関係です。 <結果> 品名に「あ」を含むもの、 テーブルAのCOUNT、 テーブルBのCOUNT、 予測金額合計、 確定金額合計 上記結果で出力したいのですが、困っています。 宜しくお願い致します。         

  • SQL文を教えてください

    以下の2つのテーブルから結果に書かれている内容を取得したいのですが、どのようなSQLを作成すればよいでしょうか? 料理テーブル 料理名 値段 ラーメン 1000 カレー 700 焼肉定食 800 オプションテーブル 料理名 オプション(00:ご飯、01:味噌汁、02:サラダ) ラーメン 00 ラーメン 01 カレー 00 焼肉定食 00 焼肉定食 01 焼肉定食 02 取得したい結果 ご飯をa、味噌汁をb、サラダをcとして、オプション有の場合は'1'を、なしの場合は'0'をたて、 オプションをabcと3桁で表したいのですが。 料理名 オプション ラーメン 110 カレー 100 焼肉定食 111 説明が下手ですいませんが、よろしくお願いします。

  • SQL2000でのユーザ定義関数作成に関する質問です。

    開発環境はvb6, SQLサーバ2000です。 下記のようなテーブルから実行結果に記入してある結果を得れるようなユーザ定義関数をおしえていただきたいです。 分類マスタ(KEY=分類CD) -------------------------------------------- 分類CD  |分類名  -------------------------------------------- 1    |魚類   | -------------------------------------------- 2    |野菜   | -------------------------------------------- 3    |牛肉   | -------------------------------------------- 4    |豚肉   | -------------------------------------------- 親テーブル(KEY=会員CD) -------------------------------------------- 会員CD  |会員名 |出身地 | -------------------------------------------- 1    |田中  |大阪  | -------------------------------------------- 2    |佐藤  |東京  | -------------------------------------------- 3    |中井  |鹿児島 | -------------------------------------------- 子テーブル(KEY=会員CD, 枝番) -------------------------------------------- 会員CD  |枝番  |分類CD  |処理日 -------------------------------------------- 1    |1   |1    |1/1 -------------------------------------------- 1    |2   |2    |1/2 -------------------------------------------- 1    |3   |2    |1/3 -------------------------------------------- 1    |4   |4    |1/4 -------------------------------------------- 1    |5   |2    |1/5 -------------------------------------------- 1    |6   |3    |1/6 -------------------------------------------- 1    |7   |4    |1/7 -------------------------------------------- 2    |1   |1    |1/1 -------------------------------------------- 2    |2   |2    |1/2 -------------------------------------------- 2    |3   |1    |1/3 -------------------------------------------- 2    |4   |1    |1/4 -------------------------------------------- 2    |5   |4    |1/5 -------------------------------------------- 2    |6   |1    |1/6 -------------------------------------------- 2    |7   |4    |1/7 -------------------------------------------- 3    |1   |3    |1/1 -------------------------------------------- 3    |2   |3    |1/2 -------------------------------------------- 3    |3   |3    |1/3 -------------------------------------------- 3    |4   |4    |1/4 -------------------------------------------- 3    |5   |4    |1/5 -------------------------------------------- 3    |6   |4    |1/6 -------------------------------------------- 3    |7   |2    |1/7 -------------------------------------------- これら三つのテーブルを連結し、尚且つユーザ定義関数を使用し、下記のような結果を得たいです。 -------------------------------------------------- 会員CD |会員名 |魚類 |野菜 |牛肉 |豚肉 | -------------------------------------------------- 1    |田中  |1   |3   |1   |2   | -------------------------------------------------- 2    |佐藤  |4   |1   |0   |2   | -------------------------------------------------- 3    |中井  |0   |1   |3   |3   | -------------------------------------------------- 要は、親テーブルの会員をベースに、子テーブルに登録されている情報を分類CD単位で集計し、横に展開し、1レコードで保持したいと思っています。 わかりにくい文とは思いますが、どうか教えていただけますようよろしくお願い致します。

  • SQL文について

    お世話になります。 Oracle初心者です。 二つのテーブルから下記の様にデータを抽出 したいのですが、その方法をご教授くださいます様、 宜しくお願い致します。         記 テーブル1 品番  全長 aaa 1111 bbb 2222 ccc 3333 テーブル2 品番  入数 bbb 5 ddd 6 ggg 7 SQL結果 品番 全長  入数 aaa 1111 bbb 2222 5 ccc 3333 ddd 6 ggg 7

  • データの移動

    VB6.0 SQLで開発しています。 A-1というテーブルに 品番 あああ 枝番 A001 数量 10個 品番 あああ 枝番  B001 数量  10個 枝番A001の品番あああを5個、枝番B001へ 移動したいのですが 動後 A-1のテーブルは 品番 あああ 枝番 A001 数量 5個 品番 あああ 枝番  B001 数量  15個 になりたいのです。 From1に移動元の品番、枝番、数量と(移動元の数量はA-1から引っ張ってきます。) 移動先の品番、枝番、数量が入力できるものを置いて 登録ボタンを押すと移動できるようにしたいのですが いまいちよく判りません。 A001から引いてB001へ足す動作を一度にっていう部分がわかりません。よろしくお願いします。     

  • mysqlのSQL文の書き方についてご質問いたします。

    下記のようなテーブルがあるとします。 [table_a] type,name1,name2 ---------------- 1,sato,keiko 2,ito,yoko 2,kishi,hruna 3,yasuda,fumi 上記テーブルに対して下のSQL文を発行すると SELECT type, CONCAT( name1,name2 ) FROM table_a 実行結果 type,CONCAT( name1,'-',name2 ) ------------------------------ 1,sato-keiko 2,ito-yoko 2,kishi-hruna 3,yasuda-fumi 上記のような実行結果が得られるかと思います。 ですが、typeの値が重複したときに一行で出力したい場合は どのようなSQL文を発行するのが良いのでしょうか? 得たい実行結果は下記となります。 実行結果 type,(連結された値) ------------------------------ 1,sato-keiko 2,ito-yoko kishi-hruna    ←typeの値が同じだったので一行に 3,yasuda-fumi 色々試してはみたのですが、なかなか解決できずにいます。 もしよろしければ、お力添えお願いします。

    • ベストアンサー
    • MySQL
  • SQL文について

    開発言語:VB2010 DB:SqlServer2005 及び ACCESS2007 SQLサーバーのテーブルをAccessのテーブルへINSERTしたいのですが、 一文で行う事は可能でしょうか? (テーブルの構造は全く同じです) 同じDB内であれば、下記のような感じで出来ると思うんですが。 +----------------------------------+ INSERT into Atest_ACCESS SELECT * FROM Btest_SQL Where OperationDate => 2011/09/05 +----------------------------------+ 出来るのあればどのようにすれば良いのが教えて頂けると幸いです。 よろしくお願い致します。

  • 2つのテーブルを結合

    VB6.0 SQL SERVER winXP にて開発中です。 よろしくお願いします。 2つのテーブルを結合したいと思っています m_seihinというテーブルに 品番  品名   12   あいう  13   かきく  m_tanabanというテーブルに 棚番 品名 333  あいう  555  かきく があります。 TDBGridに品番を入力するとm_seihinの品名と m_tanabanの棚番を表示させたいのですが 例えば12と入力すると あいう 333 教えてください。

  • SQL文でご質問です

    ご存知の方がおられましたら、教えて下さい。 下記のように、親テーブルと親子を管理するための親子管理テーブルがあります。 条件として、CD1の1が指定された時、親テーブルよりNOが2のレコードと(これは親子関係がないレコード) 親子関係のレコードの親レコードであるNOが1のレコードと子レコードであるNOが11の3レコード を1つのSQL文で取得したいのですが、可能でしょうか? ご存知の方がおられましたら、ご教授のほどよろしくお願い致します。 親テーブル(OYA_TBL) NO,BN1,CD1 ------------- 1,4,NULL 2,NULL,1 3,NULL,NULL 11,4,1 12,4,2 13,4,NULL 親子管理テーブル(OYA_KO_TBL) GOODS_NO,PACK_GOODS_NO ------------- 1,11 1,12 1,13 ↓ [取得結果] NO,BN1,CD1 ------------- 1,4,NULL 2,NULL,1 11,4,1

  • 効率の良いSQL文の書き方を教えてください

    MySQLで開発をしています。 1回のSQLで、下記テーブルの内容を日付・ユーザ番号毎(日付・ユーザ番号が同じ時に同じレコード)に、 型番1個数、 型番2個数、 その他が2か3で型番2・品番1個数、 その他が2か3で型番2・品番1個数、 その他が2か3で型番2・品番1での売上小計、 その他が2か3で型番2・品番2個数での売上小計、 売上合計、 以上の各カラムを持つテーブルに再編して返したいのですが、 効率の良いやり方がわかりません。 どなたかよろしくお願いします。 テーブル ユーザ番号 日付   型番  品番   売上  その他 ----- --- --- --- --- ---  001     3/10    1    2     500    1  001     3/10    2    1      0    1  003     3/11    2    1     100    2  004     3/12    1    1     100    2  005     3/12    2    2      0     2  001     3/13    1    2     500    1  003     3/13    2    1     100    2  003     3/13    2    1      0     3  002     3/14    1    1     100    3  005     3/15    2    2     0      1

専門家に質問してみよう