ついに夏本番!さぁ、家族でキャンプに行くぞ! >>

Access2007を使っています。

銀行名テーブルに以下のようなデータ(2列)があります。

[コード] [銀行名-支店名]
1152-001 三菱東京UFJ銀行 本店
1152-002 三菱東京UFJ銀行 丸の内支店
1152-010 三菱東京UFJ銀行 神田駅前支店
2358-007 三井住友銀行 高槻支店
2358-112 三井住友銀行 池田支店
2358-136 三井住友銀行 豊中支店
2035-053 埼玉りそな銀行 蓮田支店
2035-075 埼玉りそな銀行 西川口支店
2035-103 埼玉りそな銀行 東大宮支店
2035-218 埼玉りそな銀行 大宮支店

ここから、重複しない銀行名

三菱東京UFJ銀行
三井住友銀行
埼玉りそな銀行

を抽出するクエリを作成する方法を教えてください。

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

A 回答 (6件)

あー ゆうちょ支店名ないのですねー。


このケースは、

SELECT DISTINCT left([銀行名-支店名],iif(InStr([銀行名-支店名]) > 0,InStr([銀行名-支店名]," "),[銀行名-支店名])) from 銀行名

で対応できます。
かっこの数とか一応気を付けましたが、エラーになるかも(^^; まぁ こんな感じということで)

スペースがない場合は、ちょっと思いつきません。どこからが支店名かを判別するキーがないと、どーにもこーにもやりようがないような気がします。

既存システムの改変ですか?? だとすればこの際テーブル設計を変えることをお勧めします。
って無理かもしれないですねー。私も元開発にいましたので、心中お察しします(^^;
    • good
    • 0

あら。

申し訳ありません。今手元にaccessないので、帰ってから調べてみます。#3さんのほうがスマートですね。そちらのほうがよいかもしれません。
    • good
    • 0

あ、みすりました(^^;


SELECT DISTINCT left([銀行名-支店名],iif(InStr([銀行名-支店名]) > 0,InStr([銀行名-支店名]," "),len([銀行名-支店名]))) from 銀行名
です。
文字列をleftに渡してどーするんでしょうね(^^;;

この回答への補足

回答ありがとうございます。
「プロシージャ呼び出しが正しくありません」
メッセージが出ます。
どこが悪いんでしょう?考え中です。。。

補足日時:2009/05/27 17:00
    • good
    • 0

「支店名がない場合」であれば、IIFで対応可能です。



SELECT DISTINCT
IIF(left([銀行名-支店名],InStr([銀行名-支店名]," "))=""
,[銀行名-支店名],left(銀行名,InStr(銀行名," ")))
from 銀行名

他に考えられる、
・銀行名と支店名の間にスペースがない場合
・銀行名の途中でスペースがある場合 
の2パターンは、どうにもならないような気がします。
    • good
    • 0

Access2000以来久しく触ってませんので、的外れかも。


一般的なDBの設計思想からみるとあまりいいテーブル設計とはいえませんね。銀行名と支店名を1つのフィールドにしてるあたり。ま、それはともかくとして。

銀行名と支店名の間には必ずスペースがあると仮定して

SELECT DISTINCT left([銀行名-支店名],InStr([銀行名-支店名]," ")) from 銀行名

上のsql文をSQLビューでいれてみてください。

この回答への補足

> 銀行名と支店名を1つのフィールドにしてるあたり
そーなんですよね~。。。既にあるので使うしかないんです。。

やってみましたが、
> 銀行名と支店名の間には必ずスペースがあると仮定して
でない場合は、やっぱりでてきませんね。
「ゆうちょ銀行」など支店名がない(スペースがない)場合もありました。
この場合はどうなんでしょうか?お手数をおかけします。。。

補足日時:2009/05/27 14:38
    • good
    • 0

SELECT DISTINCT 銀行名 FROM テーブル名

    • good
    • 0

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

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

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

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

Q重複した複数のレコードを1レコードにする方法

こんにちわ。
いつもお世話になっております。

以下の図で説明させて下さい。

テーブルA
ID | 氏名 |  内容 |
------|--------|--------------|
1 | テスト| 項目1:契約 |
1 | テスト| 項目2:解約 |
1 | テスト| 項目3:不明 |
2 | 試験 | 項目1:契約 |
2 | 試験 | 項目2:解約 |
------------------------------

テーブルB
ID | 氏名 |  項目1 |  項目2 |  項目2 |
------|--------|--------------|--------------|--------------|
1 | テスト| | | |
2 | 試験 | | | |
------------------------------------------------------------

テーブルAの内容にある文字列をテーブルB
の同じIDのレコードに更新したいと考えています。

例えばテーブルAのID1番の「項目1:契約」を「項目1:」以降の文字列をテーブルBの
項目1に更新したいと言った感じなのです。

最終的にはテーブルAの内容を全てループ等でテーブルBに更新したいのですが
いいアイディアが思いつきません。

どなたかご教示頂けますでしょうか?
よろしくお願い致します。

こんにちわ。
いつもお世話になっております。

以下の図で説明させて下さい。

テーブルA
ID | 氏名 |  内容 |
------|--------|--------------|
1 | テスト| 項目1:契約 |
1 | テスト| 項目2:解約 |
1 | テスト| 項目3:不明 | ...続きを読む

Aベストアンサー

ループによる処理方法も考えてみましたが、ちょっと面倒そうでしたので、以下の方法を
代替策として提案します。
下記のクロス集計クエリ(クエリA)とテーブル作成クエリ(クエリB)を作成して、クエリBを
実行すると、テーブルBが得られます。

クエリA:
TRANSFORM First(Mid([内容],5)) AS 内容詳細
SELECT テーブルA.氏名
FROM テーブルA
GROUP BY テーブルA.氏名
PIVOT Left([内容],3);

クエリB:
SELECT クエリA.氏名, クエリA.項目1, クエリA.項目2, クエリA.項目3 INTO テーブルB
FROM クエリA
WITH OWNERACCESS OPTION;

※「項目」が1~3以外もある場合は、クエリAを基にした追加クエリを新規作成して下さい。
  (「項目1」が「項目I」(→アルファベットのアイ)や「個目」(→「こうもく」を「こもく」と打った)
  になっているなど、「項目」部分のデータ誤記をチェックする意味でも、この手順を踏む
  方が無難かもしれません)


なお、上記のクエリは、「:」が常に4文字目にある前提で組んでいます。
もしも「項目10:エラー」といった、「:」が4文字目以外のデータにも対応する必要がある
場合は、クエリAを以下のように変更してください:
TRANSFORM First(Mid([内容],InStr([内容],":")+1)) AS 内容詳細
SELECT テーブルA.氏名
FROM テーブルA
GROUP BY テーブルA.氏名
PIVOT Left([内容],InStr([内容],":")-1);

但し、こちらにすると、全てのデータに必ず「:」が含まれていることが前提になります。
(含まれていないデータがある場合、「プロシージャ呼び出しが正しくありません」との
 エラーが表示され、クエリAの結果が表示できず、クエリBもエラーになります)
「:」を間違えて「;」と入力しているなど、「:」を含まないデータは、以下のクエリで確認
できます:
SELECT テーブルA.内容
FROM テーブルA
WHERE (((テーブルA.内容) Not Like "*:*"));


・・・以上です。

ループによる処理方法も考えてみましたが、ちょっと面倒そうでしたので、以下の方法を
代替策として提案します。
下記のクロス集計クエリ(クエリA)とテーブル作成クエリ(クエリB)を作成して、クエリBを
実行すると、テーブルBが得られます。

クエリA:
TRANSFORM First(Mid([内容],5)) AS 内容詳細
SELECT テーブルA.氏名
FROM テーブルA
GROUP BY テーブルA.氏名
PIVOT Left([内容],3);

クエリB:
SELECT クエリA.氏名, クエリA.項目1, クエリA.項目2, クエリA.項目3 INTO テーブルB
FROM クエリ...続きを読む

QACCESSでクエリで選択した行番号をつけたい

選択結果に1~順に番号をつけたいのですが、過去ログを見ると 番号: DCount("*","データ","[NO]<=" & [NO])とすればいいと書かれてありました。これはNOが昇順になっている場合にしか1~順になりません。
NOはユニークですが、他のフィールドで昇順にしたい場合はどうすればいいのですか?
例)
NO フリガナ
312 タナカ
322 イトウ
333 マツダ
・・・・
番号 フリガナ(昇順)
2 イトウ
1 タナカ
3 マツダ
となってしまうのです。
ACCESS2002

どうぞよろしくお願いします。

Aベストアンサー

 ん~多分、

番号: DCount("*","テーブル名","[フリガナ]&[NO]<='" & [フリガナ] & [NO] & "'")

でいけると思いますが、だめだったら、

番号: DCount("*","テーブル名","[フリガナ]<'" & [フリガナ] & "' OR ([フリガナ]='" & [フリガナ] & "' AND [NO] <= " & [NO] & ")")

かな?

Qエクセルファイルを開く時、常に同じシートから開くようにするには?

 エクセルがそこそこ使えている者です。
エクセルファイルに多数(100以上)のシートを置き、先頭シートに見出し一覧をつくり、ハイパーリンクで希望のシートへ跳ぶようにしているのですが、各シートで作業終了後そのまま閉じてしまうと、次回開く時そのシートが開くのですが、どのシートで閉じても開く時は見出しシートになるような方法を教えて下さい。
 ソフトのようなものでもないので、簡便な方法でお願い致します。

Aベストアンサー

マクロで作ります。
ツール⇒マクロの作成で マクロ名 "auto_open" として作成内容は次のマクロをコピペすればいいです。
ファイルを開いた時はいつも、"sheet1 "の "a1" にセルの指定が来るようになります。
開くシートやセルを変えたい時は、"sheet1 "や"a1"を変えることにより、任意の場所で開けます。

  Sub auto_open()
  Worksheets("Sheet1").Activate
   Range("a1 ").Select
  End Sub

Qクエリで「データ型が一致しません」と表示される

クエリ1とクエリ2をクエリ3で結合するとクエリ3で「データ型が一致しません」と表示されます。

クエリ1のSQL文
SELECT Trim(Replace([PC管理台帳.使用者氏名]," ","")) AS 式1, PC管理台帳.新PC名, PC管理台帳.部署名, PC管理台帳.マシンベンダ名, PC管理台帳.マシンモデル
FROM PC管理台帳;

クエリ1では[使用者氏名]の苗字と名前のスペースを置換しました。

クエリ2のSQL文
SELECT 職員アカウント.職員番号, Trim(Replace([職員アカウント.氏名]," ","")) AS 式1, 職員アカウント.パスワード, 職員アカウント.メールアドレス
FROM 職員アカウント;

クエリ2では[氏名]の苗字と名前のスペースを置換しました。

クエリ3で[使用者氏名]と[氏名]が一致しているものを抽出したいです。

ちなみにクエリ3のSQL文は
SELECT [クエリ2].[式1], [クエリ2].[職員番号]
FROM クエリ1 INNER JOIN クエリ2 ON [クエリ1].[式1]=[クエリ2].[式1];

これでクエリ3をひらくと
「データ型が一致しません」
と表示されます。

どなたかアドバイスお願いします

クエリ1とクエリ2をクエリ3で結合するとクエリ3で「データ型が一致しません」と表示されます。

クエリ1のSQL文
SELECT Trim(Replace([PC管理台帳.使用者氏名]," ","")) AS 式1, PC管理台帳.新PC名, PC管理台帳.部署名, PC管理台帳.マシンベンダ名, PC管理台帳.マシンモデル
FROM PC管理台帳;

クエリ1では[使用者氏名]の苗字と名前のスペースを置換しました。

クエリ2のSQL文
SELECT 職員アカウント.職員番号, Trim(Replace([職員アカウント.氏名]," ","")) AS 式1, 職員アカウント.パスワー...続きを読む

Aベストアンサー

「データ型が一致しません」のエラーが発生するパターンのひとつに、『結合に使用している演算
フィールド(ご質問の件では式1が該当)の結果がエラーとなるレコードが含まれている』というのが
あります。
クエリ1・クエリ2の式1にはReplace関数が使われていますが、Replace関数の第1引数にNullを
指定すると、エラーになります。
従って、恐らく「PC管理台帳」テーブルの「使用者名」か、「職員アカウント」テーブルの「氏名」の
どちらか(或いは双方)が、空欄(Null)になったままのレコードがある可能性があります。
(なお、Trim関数は、第1引数がNullであってもエラーになりません)

上記推測が当たっていれば、
 a)上記フィールドが空欄になっているレコードをなくす
  (その上で、今後のことを考えると値要求を「はい」に設定しておくことをお勧めします)
 b)式1の関数を下記のように変更する
のどちらかの対応をされれば、ご質問のエラーは解消されるものと思います。


式1の変更で対応する場合は、それぞれ以下のようにしてみてください:
(「[PC管理台帳.使用者名]」と「[職員アカウント.氏名]」は、それぞれ「[PC管理台帳].[使用者名]」と
 「[職員アカウント].[氏名]」の誤記と判断して記述しています)

クエリ1:
Select Replace(Nz([PC管理台帳].[使用者氏名], ""), " ", "", 1, -1, 1) As 式1, PC管理台帳.新PC名, PC管理台帳.部署名, PC管理台帳.マシンベンダ名, PC管理台帳.マシンモデル From PC管理台帳;

クエリ2:
Select 職員アカウント.職員番号, Replace(Nz([職員アカウント].[氏名], ""), " ", "", 1, -1, 1) As 式1, 職員アカウント.パスワード, 職員アカウント.メールアドレス, From 職員アカウント;


Nz関数は、第1引数がNull(=文字列扱い不可の空白)だった場合に、第2引数の値に置換する関数
です。第2引数に「""」(空文字=文字列扱い可の空白)を指定することで、Replace関数がエラーに
なるのを回避しています。
Replace関数の一番最後の引数「1」は、半角/全角を区別させないためのものです。これにより、
スペースは全て削除されるため、Trim関数は不要になります。
(その前の「1, -1」は、それぞれ開始位置と置換する文字数の指定です。この辺りは、詳しくは
 ヘルプを確認して下さい)

「データ型が一致しません」のエラーが発生するパターンのひとつに、『結合に使用している演算
フィールド(ご質問の件では式1が該当)の結果がエラーとなるレコードが含まれている』というのが
あります。
クエリ1・クエリ2の式1にはReplace関数が使われていますが、Replace関数の第1引数にNullを
指定すると、エラーになります。
従って、恐らく「PC管理台帳」テーブルの「使用者名」か、「職員アカウント」テーブルの「氏名」の
どちらか(或いは双方)が、空欄(Null)になったままのレコードがある可能性があ...続きを読む

QOfficeアクセス テーブル「テキスト型」⇒「日付型」への変換について

テーブルにデータが保管されており、そのフィールドの一つに「テキスト型」で”20080301”のようなデータを持っています。これを「日付/時刻型」”2008/03/01”のように変換したいのですが、どのようにすればよいのでしょうか。

※ちなみにこのオリジナルデータは毎日、自動的にテーブルにダウンロードされており、このテーブル自体の型を予め「日付/時刻型」に変換すると、日々のデータ取得時にエラーとなってしまいます。ですので、「日付/時刻型」のフィールドを持った新規のテーブルに、この”20080301”のデータを変換し格納したいのですがどのようにすればよろしいでしょうか。

テーブル⇒デザインより、該当のフィールドの型を「テキスト型」⇒「日付/時刻型」へ直接変換してしまうと、「データの変換中にエラーが発生しました。○○件のレコードのデータが失われました。」と表示されます。素人のため、なるべく追加クエリや更新クエリや簡単な関数のみでの方法を教えていただけたら幸いです。

Aベストアンサー

テーブルに日付時刻型フィールドを追加して、
更新クエリを使って、#1さんが提案されている
数式を使えばよいのでは?

QACCESSクエリエラーの原因

ACCESS2007を使用しています。

作成時はうまくいってたはずのクエリが最近きちんと動作しなくなり
原因を探してますが分からず皆様のお知恵をお借りしたいと思っています。


問題のクエリではクエリ実行時にある条件のフィールドに「#error」と出力されています。
(英語版のACCESSですので、もしかしたら日本語版だと少し違うかもしれません。)
そのクエリフィールドの内容は、

IIf([weight]<>"",IIf([weight]<[SD3n],3,IIf([weight]<[SD2n],2,IIf([weight]<[SD2p],1,IIf([weight]<[SD3p],4,5)))),9)

このクエリで参照しているのは1つのクエリで、その中に
weight, SD3n, SD2n, SD2p, SD3p
というフィールドがあります。

簡単に説明すると、各人の体重(weight)を元にその体重がどのレベル(太りすぎとか痩せ気味とか)にあるかを
1~5のグループに分けるというものです。
各人の年齢や性別によってSD3n, SD2n, SD2p, SD3pは違うものが入っています。

また、体重が入力されていないものは「9」を返します。

で、問題の「#error」が返されるのは、体重が入力されている全てで、体重が空白のレコードには
きちんと「9」を返してくれます。

ちなみに、最初にIIF関数の条件部分を「is Null」に変えて、

IIf([weight] is Null,IIf([weight]<[SD3n],3,IIf([weight]<[SD2n],2,IIf([weight]<[SD2p],1,IIf([weight]<[SD3p],4,5)))),9)

とした場合は、体重が入力されているレコードについて全て「5」が返されます。
本来はデータの内容的には全て「3」を返すはずです。

また、元のクエリのweight, SD3n, SD2n, SD2p, SD3pの参照元のテーブルでは
全てのフィールドについて数値型にしています。

最初、ダミーデータ等でテストをしていたときはうまくいっていたので、何かがおかしくなったのだと
思うのですが、よくわからず、もしも、アドバイス等ありましたら教えて下さい。

ACCESS2007を使用しています。

作成時はうまくいってたはずのクエリが最近きちんと動作しなくなり
原因を探してますが分からず皆様のお知恵をお借りしたいと思っています。


問題のクエリではクエリ実行時にある条件のフィールドに「#error」と出力されています。
(英語版のACCESSですので、もしかしたら日本語版だと少し違うかもしれません。)
そのクエリフィールドの内容は、

IIf([weight]<>"",IIf([weight]<[SD3n],3,IIf([weight]<[SD2n],2,IIf([weight]<[SD2p],1,IIf([weight]<[SD3p],4,5)))),...続きを読む

Aベストアンサー

IIf([weight]<>"",
ではなく、
IIf(IsNull([weight]),
です。

weightは数値型なのに、[weight]<>""
はweightをテキスト型として評価しています。


人気Q&Aランキング