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

アクセス2003でクエリーなどを利用してテーブルを分割させる方法を教えてください。

テーブルは次のような構造になっています。

 生徒番号 講座1 講座2 講座3 講座4 講座5 講座6 ‥ 講座40
 1101  1  0   0  1   1  0 0
 1102  0  1   0  1   0  1    0
   ・
   ・
   ・

上記の表を下記の用に変更したいのですが方法がわかりません。
講座の種類が少なければ1件1件やるのですが、種類が多いことと実施する回数が複数回なのでクエリで実施したいと思っています。

生徒番号 講座番号 受講
1101  1    1
1101  4    1
1101  5    1
1102  2    1
1102  4    1
1102  6    1
  ・   ・    ・
  ・   ・    ・
  ・   ・    ・

よろしくお願いいたします。

A 回答 (2件)

テーブル構造がまずいので


ユニオンクエリで横から縦に変換することになります。

SELECT 生徒番号, 1 AS 講座番号, 1 AS 受講
FROM テーブル名
WHERE 講座1 = 1
UNION ALL
SELECT 生徒番号, 2 AS 講座番号, 1 AS 受講
FROM テーブル名
WHERE 講座2 = 1
UNION ALL
SELECT 生徒番号, 3 AS 講座番号, 1 AS 受講
FROM テーブル名
WHERE 講座3 = 1
 ・・・

全部1なら受講フィールドは必要ないとは思いますが・・

この回答への補足

実行してみたのですが、少し期待した結果と異なりました。
上記の実行文を実行したのですが、講座番号1のみ表示され、252件表示されました。
講座番号1は、3名の予定です。
講座番号2は、23名
講座番号3は、5名
テーブルの総件数は、252名です。

生徒番号 講座番号 受講
1101  1    1
1102  1    1
1103  1    1
1104  1    1
  ・   ・    ・
  ・   ・    ・
  ・   ・    ・

補足日時:2007/05/01 13:28
    • good
    • 0

> 上記の実行文を実行したのですが、講座番号1のみ表示され、252件表示されました。


そんなはずはありません。
記述に間違いがあると思われます。

> SELECT 生徒番号, 3 AS 講座番号, 1 AS 受講
> FROM テーブル名
> WHERE 講座3 = 1
2箇所の数字 (上の場合は 3)を1から40まで変えるのですよ。

この回答への補足

bonaronさま
何度もアドバイスありがとうございます。
上手くいきました。
ユニオンクエリで一行空けてから記述したところ上手くいきました。
上から詰めて記述してはいけないのでしょうか?

ご迷惑おかけしました。ありがとうございます。

補足日時:2007/05/02 08:52
    • good
    • 0

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