プロが教える店舗&オフィスのセキュリティ対策術

レポートにて1件のレコードを複数レコードとして表示。したいです。

マスタというテーブルに時間1・結果1・時間2・結果2・時間3・結果3という項目があり、
これをクエリにて別々のレコードとしてレポートに表示したいのです。時間1・時間2・時間3すべて入っているものは3件として

時間1・結果1
時間2・結果2
時間3・結果3

時間1・時間2のみ入っているものは2件として。

ユニオンクエリというのを使うと出来そうですが、よく分かりません。
SQLビューにどのように書けばよろしいでしょうか?

テーブルの構成は今から直すことは出来ない状態で…。

A 回答 (2件)

ご推測の通り、ユニオンクエリで対応できます。


基本的には、各レコードに対応する選択クエリに相当するSQL文を、
「Union」で結合するだけですので、覚えてしまえばそれほど
難しくはないかと思います。

1)値が重複するデータがひとつに集約されてよい場合:
Select マスタ.時間1 As 時間, マスタ.結果1 As 結果 From マスタ
Union
Select マスタ.時間2 As 時間, マスタ.結果2 As 結果 From マスタ
Union
Select マスタ.時間3 As 時間, マスタ.結果3 As 結果 From マスタ;

※「Union」の後の改行は、クエリを閉じると自動で削除されます。
※わかりやすさ優先(のつもり)で3つのSelect文の体裁を揃えましたが、
 実際には2行目以降の「As 時間」「As 結果」は無視されます。

2)値が重複するデータも集約せずに表示する場合:
Select マスタ.時間1 As 時間, マスタ.結果1 As 結果 From マスタ
Union All
Select マスタ.時間2 As 時間, マスタ.結果2 As 結果 From マスタ
Union All
Select マスタ.時間3 As 時間, マスタ.結果3 As 結果 From マスタ;

3)「マスタ」テーブルにレコードを特定できる「ID」などがあって、
 それを同時に出力する場合:
Select マスタ.ID As ID, マスタ.時間1 As 時間, マスタ.結果1 As 結果 From マスタ
Union
Select マスタ.ID As ID, マスタ.時間2 As 時間, マスタ.結果2 As 結果 From マスタ
Union
Select マスタ.ID As ID, マスタ.時間3 As 時間, マスタ.結果3 As 結果 From マスタ


・・・以上です。
なお、これらのユニオンクエリを基にしてテーブル作成クエリを組むことも可能ですので、
あわせて参考までに。

この回答への補足

ありがとうございます。

As 時間 の部分は任意でつけてよいのですよね?

クエリ式 マスタ.時間1 as 時間の構文エラー:演算子がありませんとでます(>_<)

補足日時:2009/03/29 13:19
    • good
    • 0

No.1です。



> As 時間 の部分は任意でつけてよいのですよね?

はい、基本的には大丈夫です。
(但し、「+(半角プラス)」単独など、一部の文字は使用すると
 エラーになるので、完全に任意というわけではありません)


> 演算子がありませんとでます(>_<)

どういうふうにしたときにそのエラーが出るか、あたりをつけて
確認したところ、「As」の前後のスペースのどちらか一方でも
全角にしてしまうと、Asが演算子としてではなく、前後と連続した
文字列としてして認識されてしまい、ご質問のエラーとなることが
わかりました。
ですので、全角スペースを半角スペースに修正していただけば、
ご質問のエラーは出なくなると思います。

また、補足欄の文を見ると、「マスタ」の後のピリオドも全角
となっているようなので、こちらも半角にしておいて下さい。
(このままだと「マスタ.時間1」がパラメータとして要求される
 ことになりますので・・・)
    • good
    • 0

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

関連するカテゴリからQ&Aを探す