• 締切済み

2つのテーブルからの抽出と件数取得

詳細な手順は以下なのですが、C_TBLにはデータが万件を想定して、早く処理ができるSQLのSELECT分を教えて欲しいのですが。 ※1回のSQLでできれば件数を把握したい。 (1)C_TBLの日付=2007のデータを抽出  (2)A_TBLの会社=cp1のデータのみ抽出  (3)A_TBLの会社(b11・b12毎)に、C_TBLの日付(月毎)で件数を取得 A_TBL     B_TBL    C_TBL A  会社   B  単価   C  A  B  数量 日付 a1 cp11   b1  10    c1 a1 b1   1  2007-10-01 a2 cp21   b2  20    c2 a3 b2   2   2007-11-01 a3 cp12   b3  10    c3 a1 b1   1  2007-10-10 a4 cp11   b4  30    c4 a2 b3   3  2007-10-01 a5 cp21   b5  20    c5 a1 b1   5  2007-11-01 ※A_TBLのA、B_TBLのB、C_TBLのCはPrimary_keyです。 上記処理はページ数を書き出す為の件数を取得しているだけなのですが、次に再度、表示件数分(LIMIT)だけ以下の処理を行う  (1)上記のと同様  (2)上位と同様  (3)A_TBLの会社(b11・b12毎)に、C_TBLの日付(月毎)で表示件数分を抽出  (4)A_TBLの会社(b11・b12毎)に、C_TBLの日付(月毎)で、B_TBLの単価を参照して金額を算出し集計。 宜しくお願い致します。

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

例と命題に不一致がありますので補足が必要です。 (2)の「A_TBLの会社=cp1」とはなんでしょうか?cp11ならありますが cp1は見当たりません。 (3)「A_TBLの会社(b11・b12毎)」も同様。b11やb12などのレコードは 見当たりません。 また質問の後半(「上記処理は」以降)は質問になっていませんが この部分については手順の説明であって回答する必要はないという 理解でよろしいのでしょうか? とりあえず今の情報からですと (1) SELECT COUNT(*) FROM `C_TBL` WHERE `日付` BETWEEN '2007-01-01' AND '2007-12-31' (2) SELECT COUNT(*) FROM `A_TBL` WHERE `会社`='cp1' (3)月単位での集計であれば、別フィールドを設定するか 別途月集計用のテーブルをつくると効率的だとおもいます。 今のままだと厳しいかも

関連するQ&A