- ベストアンサー
テーブルから重複しないデータを抽出する方法
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銀行 三井住友銀行 埼玉りそな銀行 を抽出するクエリを作成する方法を教えてください。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
あー ゆうちょ支店名ないのですねー。 このケースは、 SELECT DISTINCT left([銀行名-支店名],iif(InStr([銀行名-支店名]) > 0,InStr([銀行名-支店名]," "),[銀行名-支店名])) from 銀行名 で対応できます。 かっこの数とか一応気を付けましたが、エラーになるかも(^^; まぁ こんな感じということで) スペースがない場合は、ちょっと思いつきません。どこからが支店名かを判別するキーがないと、どーにもこーにもやりようがないような気がします。 既存システムの改変ですか?? だとすればこの際テーブル設計を変えることをお勧めします。 って無理かもしれないですねー。私も元開発にいましたので、心中お察しします(^^;
その他の回答 (5)
- renrui3844
- ベストアンサー率53% (41/76)
あら。申し訳ありません。今手元にaccessないので、帰ってから調べてみます。#3さんのほうがスマートですね。そちらのほうがよいかもしれません。
- renrui3844
- ベストアンサー率53% (41/76)
あ、みすりました(^^; SELECT DISTINCT left([銀行名-支店名],iif(InStr([銀行名-支店名]) > 0,InStr([銀行名-支店名]," "),len([銀行名-支店名]))) from 銀行名 です。 文字列をleftに渡してどーするんでしょうね(^^;;
- qbr2
- ベストアンサー率50% (62/123)
「支店名がない場合」であれば、IIFで対応可能です。 SELECT DISTINCT IIF(left([銀行名-支店名],InStr([銀行名-支店名]," "))="" ,[銀行名-支店名],left(銀行名,InStr(銀行名," "))) from 銀行名 他に考えられる、 ・銀行名と支店名の間にスペースがない場合 ・銀行名の途中でスペースがある場合 の2パターンは、どうにもならないような気がします。
- renrui3844
- ベストアンサー率53% (41/76)
Access2000以来久しく触ってませんので、的外れかも。 一般的なDBの設計思想からみるとあまりいいテーブル設計とはいえませんね。銀行名と支店名を1つのフィールドにしてるあたり。ま、それはともかくとして。 銀行名と支店名の間には必ずスペースがあると仮定して SELECT DISTINCT left([銀行名-支店名],InStr([銀行名-支店名]," ")) from 銀行名 上のsql文をSQLビューでいれてみてください。
補足
> 銀行名と支店名を1つのフィールドにしてるあたり そーなんですよね~。。。既にあるので使うしかないんです。。 やってみましたが、 > 銀行名と支店名の間には必ずスペースがあると仮定して でない場合は、やっぱりでてきませんね。 「ゆうちょ銀行」など支店名がない(スペースがない)場合もありました。 この場合はどうなんでしょうか?お手数をおかけします。。。
- sineminna
- ベストアンサー率31% (118/370)
SELECT DISTINCT 銀行名 FROM テーブル名
補足
回答ありがとうございます。 「プロシージャ呼び出しが正しくありません」 メッセージが出ます。 どこが悪いんでしょう?考え中です。。。