• ベストアンサー

テーブルから重複しないデータを抽出する方法

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銀行 三井住友銀行 埼玉りそな銀行 を抽出するクエリを作成する方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

あー ゆうちょ支店名ないのですねー。 このケースは、 SELECT DISTINCT left([銀行名-支店名],iif(InStr([銀行名-支店名]) > 0,InStr([銀行名-支店名]," "),[銀行名-支店名])) from 銀行名 で対応できます。 かっこの数とか一応気を付けましたが、エラーになるかも(^^; まぁ こんな感じということで) スペースがない場合は、ちょっと思いつきません。どこからが支店名かを判別するキーがないと、どーにもこーにもやりようがないような気がします。 既存システムの改変ですか?? だとすればこの際テーブル設計を変えることをお勧めします。 って無理かもしれないですねー。私も元開発にいましたので、心中お察しします(^^;

その他の回答 (5)

回答No.6

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

回答No.5

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

meron_
質問者

補足

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

  • qbr2
  • ベストアンサー率50% (62/123)
回答No.3

「支店名がない場合」であれば、IIFで対応可能です。 SELECT DISTINCT IIF(left([銀行名-支店名],InStr([銀行名-支店名]," "))="" ,[銀行名-支店名],left(銀行名,InStr(銀行名," "))) from 銀行名 他に考えられる、 ・銀行名と支店名の間にスペースがない場合 ・銀行名の途中でスペースがある場合  の2パターンは、どうにもならないような気がします。

回答No.2

Access2000以来久しく触ってませんので、的外れかも。 一般的なDBの設計思想からみるとあまりいいテーブル設計とはいえませんね。銀行名と支店名を1つのフィールドにしてるあたり。ま、それはともかくとして。 銀行名と支店名の間には必ずスペースがあると仮定して SELECT DISTINCT left([銀行名-支店名],InStr([銀行名-支店名]," ")) from 銀行名 上のsql文をSQLビューでいれてみてください。

meron_
質問者

補足

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

  • sineminna
  • ベストアンサー率31% (118/370)
回答No.1

SELECT DISTINCT 銀行名 FROM テーブル名

関連するQ&A