【最大10000ポイント】当たる!!質問投稿キャンペーン!

私は、accessについてあまり詳しくないものなのですが、仕事上50近くあるデータを一つにまとめたいんです。
データは2つありまして、
1.それぞれのテーブルが微妙にフィールド数が異なる場合の結合
 例)・Aのテーブルのフィールド名 
   名前 クラス名 出身県 出身コード 血液型 性別
   
   ・Bのテーブルのフィールド名
   名前 出身県 血液型 性別

   ・Cのテーブルのフィールド名
   名前 クラス名 出身コード 血液型 
  ⇒このように微妙に異なる。しかもレコード数がかなり多いのです。これは、ユニオンクエリは使えないですよね?何かいい方法はないでしょうか?


2.テーブルの構造は同じなのですが、フィールド数が多くてユニオンクエリを使おうとすると、『フィールド数が多すぎる』とエラーメッセージがでてしまう。この場合の対処方法でいいのはないでしょうか?

なにぶん、私はaccessをあまり使わないのでわかりにくい質問だと思いますが、どなたかすみませんが教えてください。お願いします。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

> これは、ユニオンクエリは使えないですよね?



ユニオンクエリで、フィールドを「*」で省略することはできなくなりますが、
表示するフィールドを列挙する形であれば、対応可能です。
(但し各Select文で、不足するフィールド分のダミー列の追加が必要)

【例】
Select 名前, クラス名, 出身県, 出身コード, 血液型, 性別 From A
Union
Select 名前, "(不明)", 出身県, "(不明)", 血液型, 性別 From B
Union
Select 名前, クラス名, "(不明)", 出身コード, 血液型, "(不明)" From C;

※当該テーブルがデータを持たない時に「(不明)」と表示させる場合。


> 『フィールド数が多すぎる』とエラーメッセージがでてしまう。

とりあえず、45フィールドほどのテーブルを作成してテストした限りでは、
そのメッセージは表示されませんでした(汗)

もしも、必ずしも常に全フィールドのデータが必要ではないなら、ひとつの
手段としては、上記のように必要なフィールドに限定してユニオンクエリを
作成する、という方法があるかと思います。
(一旦作業用のテーブルを作成し、これに順次、追加クエリで他のテーブル
のデータを追加、というのも考えましたが、なんとなくこちらでも同様に
フィールド数の上限を超えてしまいそう・・・(汗))


あまりお役に立てそうにありませんが(汗)、参考までに。
    • good
    • 0
この回答へのお礼

ユニオンクエリでダミー列を入れるとできるわけですね!
フィールドの件に関しても250以上のフィールド数なので、別のソフトを利用することにしました。
ありがとうございました。

お礼日時:2010/02/10 16:38

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QACCESS2000「定義されているフィールドが多すぎます。」のエラーについて

いつもお世話になっております。
(1)WINXPでACCESS2000SR-1を使用しています。

(2)テーブルのフィールド数が現在248個使用し、限界の255以内です。

(3)データ型(テキスト)のフィールドサイズを小さくしたほうが
処理速度やメモリを節約できると聞き
フィールドサイズを50から20にさげたところ
「定義されているフィールドが多すぎます。」というエラーメッセージ
がでました。

以前もフォームを入力しているときに、上記のメッセージがでて
途中で止まったことが多々あります。

(4)テーブルのデザインビューのフィールドプロパティのコメントにはフィールド名は64文字以内と書かれています。
ヘルプの「名前付けの規則」にはフィールド名は64バイト以内にとかいてあります。
今回のフィールドには、英数ひらがな漢字をつかって40文字近くで名前を付けてあり、今まで使用してきました。

今回のエラーは、(2)(4)が関係しているのでしょうか?

宜しくお願い致します。

Aベストアンサー

こんにちわ

255項目以内でも
何度もテーブル作成(訂正)している場合は
フィールド数が多い、というエラーになることが
あります

対策としては
新規テーブルを作成して、そこへ
旧テーブルの項目をコピー&ペーストすれば
たぶんエラーは無くなります

QACCESS IIF関数 複数条件の設定について

 選択クエリにおいて、あるフィールド「 X」 のレコード数値が
 
  0<[X]<=50   であれば A 
  50<[X]<=100  であれば B 
  100<[X]<=150  であれば C

 と表記させるフィールド「Y」を追加したいと考えています。
 この場合、Yのフィールド設定で指定する数式についてご教授願います。

 一応、
  IIf(0<[X]<=50,"A","") Or IIf(50<[X]<=100,"B","") Or IIf(100<[X]<=150,"C","")

  としましたが、実行すると、Yの列がすべて「-1」と表記されてしまいます。

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

Aベストアンサー

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A", [X]<=100, "B", [X]<=150, "C", True, "")


なお、数学あるいは一般生活では確かに「0<[X]<=50」という表記をしますが、
Accessの関数などではこれだと正しい結果が得られません。
正しく認識させるためには、等号・不等号を挟んだ式は、「左辺」と「右辺」の
2つの要素からなる形にする必要があります。
(「0<[X]<=50」は「[X]>0 And [X]>=50」と分割してやる、と)

但し、今回のご質問のような『連続した範囲』であれば、前(左)で既出となる
式の要素で「[X]<=0」が「真(=-1)」とならなかった時点で、「[X]>0」が保証
されますので、上記のように、「[X]>0」を省略して「[X]<=50」だけを条件として
指定すればOk、ということになります。
(「0<[X]<=50」の次が「80<[X]<120」などのように、「50~80」が欠けた
 場合は、省略ができない、と)


【参考】
「0<[X]<=50」は、このままだと「0 < ([X]<=50)」という式と解釈されます。
この場合、「[X]<=50」は、「真(=-1)」か「偽(=0)」か「Null」のいずれかに
なります。
何にせよ、「0<[X]<=50」全体として「正(=-1)」となることがないため、
ご質問の式では、IIF関数は常に第3引数に指定された値「""」を返す
ことになります。

この結果、式全体としては「"" Or "" Or ""」という形となり、「0かNull」
以外なので、「真(=-1)」という値が返された、ということです。

なお、Nullについては、以前、他の方の質問につけた回答も、併せて参考までに:
http://oshiete.goo.ne.jp/qa/4850675.html

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A"...続きを読む

QACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ

ACCESSで空白のデーターをクエリで判定/識別する方法を教えてください。
EXCELでは空白を""で判定/識別表していますがACCESSではどうなるのでしょうか。

下の例はフィールドに試験番号があればその番号を、空白なら”欠席”と表示しようとしています。
IIf(([試験番号]="空白の場合何を入れる?"),[試験番号],"欠席")

Aベストアンサー

もうひとつの書き方は
式1: IIf([試験番号] Is Not Null,[試験番号],"欠席")
第2、第3引数の、質問の順序にあわせるとこうなる。

Q構造が異なる二つのテーブルをunionで結ぶには?

構造が異なる二つのテーブルをUNION(問い合わせの結合)したいのですが,
対応しないカラムの分だけ
"length('') as user_id"などとして ダミーカラムを作り,無理やり結合する方法を取っています.

もっとスマートに UNIONする方法はないのでしょうか?

Aベストアンサー

cとfとが関係ないのであれば、
(SELECT b AS a1 , c AS a2, '' AS a3 FROM A ORDER BY a1)
UNION
(SELECT b AS a1, '' AS a2, f AS a3 FROM B ORDER BY a1)
ORDER BY a1;
でいいのかな?

QAccess2010でテーブルを1つにまとめる方法

Access2010を使っている者です。

同じ形式のテーブルを3つ作ったのですが、それらを1つのテーブルにまとめるにはどのようにすれば良いのでしょうか?
(1つにしないと他のテーブルとリレーションが組めないので)

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

Aベストアンサー

テーブルを作成するとき、新しい選択クエリを作り
もとになるテーブルをNo1で作成したユニオンクエリを
指定して、フィールドを設定し、ツールバーのでクエリから
テーブル作成を選択してウィザードにしたがって
テーブル作成クエリをつくるのが簡単かもしれません。

QAccess 別テーブルにある値を抽出条件にしたい

OS:WindowsXP SP3
使用ソフト: Microsoft Access2003


選択クエリにて、別テーブルのフィールドにある値すべてを抽出条件にできますか?


ホームページに来て頂いた方の検索キーワードを集計しております。
テーブル1には『検索キーワード履歴』フィールドがあり、お客様が使用した検索キーワードが入力されています。(約2万件)
テーブル2には『除外キーワード候補』フィールドがあり、不要なキーワードが入力されています。(約10件)


クエリにて、『検索キーワード履歴』から『除外キーワード候補』の値を全て除いた結果を出力させたいのですが、
抽出条件をどのように指定したらいいのか分かりません。

そもそも、別テーブルのフィールドにある値すべてを除外させる抽出条件って指定できるのでしょうか。
SQLを用いる方法でも構いませんので教えてください。

Aベストアンサー

SELECT * FROM テーブル1
WHERE NOT EXISTS
(SELECT * FROM テーブル2 WHERE テーブル1.検索キーワード履歴 = テーブル2.除外キーワード候補)
OR 検索キーワード履歴 IS NOT NULL
とか
SELECT * FROM テーブル1
WHERE 検索キーワード履歴 NOT IN (SELECT 除外キーワード候補 FROM テーブル2 )
ということ?
1フィールドに1キーワードの場合です。

QACCESSユニオンクエリから新テーブルを

ACCESS2007/2010で、ユニオンクエリ(10個のテーブルをつないだ)から新テーブルを作りたいのですが、検索で調べて、なかなかピタリと説明してくれているサイトが見つかりません。。。

「ユニオンクエリ01」の指定
作成-クエリデザイン、閉じる、テーブルの作成
辺りをいじるんだと思われますが、

どなたか正確にナビして頂けませんでしょうか?

Aベストアンサー

例えば、以下の様なユニオンクエリがあったとします。

SELECT * FROM テーブル1
UNION ALL
SELECT * FROM テーブル2
UNION ALL
SELECT * FROM テーブル3;

で、上記をテーブル作成に変えるには、

SELECT * INTO 新テーブル名 FROM (ユニオンクエリのもの);


省略せずに記述すると、

SELECT * INTO 新テーブル名 FROM (
SELECT * FROM テーブル1
UNION ALL
SELECT * FROM テーブル2
UNION ALL
SELECT * FROM テーブル3
);

になると思います。


※ ユニオンクエリ部分をクエリとして作成しているのであれば、

SELECT * INTO 新テーブル名 FROM クエリ名;

になると思います。


※ テーブル作成・・・なら、
選択クエリ内の FROM の前に INTO 新テーブル名 を記述することでできたと思います。

Qユニオンクエリについて

お世話になります。

クエリAとクエリBがあり、ユニオンクエリにて両クエリを結合させたいと思っております。
しかし、クエリBにしかないフィールド(test)がある為、「列数が一致しません」となってしまいます。

このような場合、一般的にはどのようにして対処するのでしょうか。
恐らくクエリAにtestというフィールドを仮想的に?追加するのだと思いますが、やり方がわかりません。

ご教授の程、宜しくお願い致します。

Aベストアンサー

クエリA側にダミーの項目を1つ増やすのであれば以下の様にすればよいと思います。

クエリA
select
  A.Col1
  ,A.Col2
  ,A.Col3
from A

クエリB
select
  B.Col1
  ,B.Col2
  ,B.Col3
  ,B.Col4
from B

としてUNIONするとこうなります。

select
  A.Col1
 ,A.Col2
 ,A.Col3
 ,'' AS Col4
from A
union all
select
  B.Col1
 ,B.Col2
 ,B.Col3
 ,B.Col4
from B

QAccessのRefresh・Requery・Repaintの違い

Requeryはもう一度ソースレコード(テーブル)を読み込むようです。このとき、テーブルの先頭レコードに移動してしまいます。
Refreshは最新のレコード(テーブル)を再表示するような気がします。レコードの移動は起こらない気がします。
Repaintは、VBAでキャプションなどを変更したとき使っています。
でも、よくわかっていません。
どんなときにどんなメソッドを使えばいいのでしょうか?
詳しい方、よろしくお願いいたします。

Aベストアンサー

たびたびすみません。
調べてたらこんなのがでてきました。
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

参考URL:http://www.nurs.or.jp/~ppoy/access/access/acF007.html

Qテーブルの項目が異なるテーブルの結合方法

こんばんは。
すみませんが、下記のように出力するSQLを教えて下さい。

[処理table]のstatusが「新規」のに該当する場合、[処理table]の内容を、
[処理table]のstatusが「新規」のに該当しない場合、[処理ログテーブル]
の「日付」が現在日付に近い内容のみを出力する。

 氏名 project名 status 日付
------+----------+-------+-------
 鈴木 softA  新規
 大塚 softB  承認   08/20
 大沢 softC  新規

を期待しています。
SQLの経験が少ない為、悩んでます。
「UNION ALL 」について調べて見ましたが、カラム数が異なるのでNGと判断
しました。
「それぞれの条件の結果を縦につなげて…」とイメージしてみたのですが、
それに相当する資料が見当たらず、悩んでいます。
tableの[処理ログtable]の「日付」を[処理table]の項目とすればよ
いのですが、現在のDB設計がこのようになってしまっているので、改善できま
せん。

補足もしますので、お忙しいところすみませんが、宜しくお願いします。

-説明-

[顧客table](主キー:顧客ID)
顧客ID 氏名
------+-------
020001 鈴木
020002 大塚
020003 大沢

[処理table](主キー:通番(自動発番))
通番 顧客ID projectID status
----+-------+----------+-----------
0001 020001   0001 新規
0002 020003   0003 新規
0014 020002   0004 承認

[処理ログtable](主キー:通番(自動発番))
通番 顧客ID projectID status 日付
----+-------+----------+-------+------
0032 020002   0004 修正  08/02
0033 020002   0004 修正  08/15
0034 020002   0004 承認  08/20

[projecttable](主キー:projectID)
projectID project名
---------+----------------
  0001 softA
  0002 softB
  0003 softC
  0004 softF

こんばんは。
すみませんが、下記のように出力するSQLを教えて下さい。

[処理table]のstatusが「新規」のに該当する場合、[処理table]の内容を、
[処理table]のstatusが「新規」のに該当しない場合、[処理ログテーブル]
の「日付」が現在日付に近い内容のみを出力する。

 氏名 project名 status 日付
------+----------+-------+-------
 鈴木 softA  新規
 大塚 softB  承認   08/20
 大沢 softC  新規

を期待しています。
SQLの経験が少ない為、悩んでます。
「UNION ALL...続きを読む

Aベストアンサー

こんにちは、

> カラム数が異なるのでNGと判断しました。
status が「新規」の場合、NULL を日付として返してやれば、
UNION ALL でOk ですょ。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング