mysql:1276
From: (遠藤 俊裕) <<endo@xxxxxxxxxx>>
Date: Tue, 12 Oct 1999 17:13:38 +0900
Subject: [mysql 01276] お知恵拝借(うまい SQL の書き方)
遠藤と申します。 今回は私の無い知恵ではなかなかいい方法が思いつかず、皆様のお 知恵を拝借したくメールいたしました。 現在以下のようなテーブルが存在します。 CREATE TABLE WorkSchedule ( SerialNumber INT NOT NULL, SerialCode INT NOT NULL, CurrentDate CHAR ( 10 ), CurrentWork CHAR ( 50 ), CarType CHAR ( 5 ), Note CHAR ( 255 ) ); この中には「個人情報」へ繋がる SerialCode とその個人に対する 日付(CurrentDate)と作業(CurrentWork)が入っています。 とりあえず、その他の情報は無視します。 #「個人情報」は SerialCode と Name が入っているテーブルです。 ここで SerialNumber はこのレコードを一意に決める Index 項目です。 # 宣言はしていませんが、気にしないで下さい。 で、結果として以下のような帳票を出したいと考えています。 +---------------+-----------+-----------+-----------+-----------+ | 名 前 | 4月 | 5月 | 6月 | 7月 | … +---------------+---+---+---+---+---+---+---+---+---+---+---+---+ | 遠藤 俊裕 | 5| 10| 14| 6| 11| 15| 8| 12| | 4| 16| | … | | 15| 20| 26| | | | | | | | | | +---------------+---+---+---+---+---+---+---+---+---+---+---+---+ |名無しのごんべ | 4| 9| 18| 11| 18| 25| 7| 17| | 7| | | … | | | | | | | | | | | | | | +---------------+---+---+---+---+---+---+---+---+---+---+---+---+ | | | | | | | | | | | | | | 更にある特定の条件(CurrentWork がある特定の時)数字に○を付けた いと思っております。 抽出条件は「個人情報」にある条件と、WorkSchedule にある日付(CurrentDate) が年度内であること、それと、作業(CurrentWork)が必要な情報にマッチ していることです。 こんな時どんな SQL を書き、データをどう扱えば良いのでしょうか? ちなみに、今は Access で組んでいるのですが、以下の手順で作成して います。 1.年と月をくっつけたデータと(ex. 199904)日を列挙したデータ(12 桁ゼロサプレス無し)を作成する。 ex. 199904, 050000000000 2.上のデータに同じ月の日付があると追加するような関数を作り select する。 ex. 199904, 050000000000 199904, 051000000000 3.同時に日付に会わせて○を付けるべき場所にビットを立てるデータ も作る ex. 199904, 050000000000, 000000 199904, 051000000000, 010000 4.上のデータを年と日付をくっつけたデータでグルーピングし、前述の Last 値を取る。 5.帳票レイアウトの時、日付の分解と、ビットの確認をしながらデー タの表示と○を書く。 以上を行っていますが、上記4までの作業がとっても重たく、時間がか かります。しかし、表示前のデータ生成までは Server にやらせるべき だと考えますので、なんとかして、軽い SQL を書きたいと思っています。 どうすれば賢く SQL がかけるでしょうか? ご教授よろしくお願いいたします。m(_ _)m
-> 1276 1999-10-12 17:13 [<endo@xxxxxxxxxx> ] お知恵拝借(うまい SQL の書き方) 1278 1999-10-13 00:59 ┗[とみたまさひろ <tomm] 1279 1999-10-13 12:41 ┗[<endo@xxxxxxxxxx> ]