- ベストアンサー
SQLで特定の項目の重複のみを排除した全項目を取得する方法
私は仕事上でデータベースを扱っていて、タイトルのような処理を行う必要があるのですが、いかんせん方法がわからずネット上を検索しても同様だったためここで質問させていただきます。 質問点を簡単に説明いたしますと、 たとえばAというテーブルがあって、 項目名1 項目名2 項目名3 項目名4 A あ ア 亜 A い ア 以 A う ア 宇 B え イ 江 B お イ 尾 上のような構造になっている場合に「項目名1」について重複している項目を排除し、結果として 項目名1 項目名2 項目名3 項目名4 A あ ア 亜 B え イ 江 上のようなデータを取得したいのです。 この時に、Aの重複を排除して取得するレコードは1~3行目のどれでもよいです。 また、データを取得する際には必ずそのレコードの「全項目」を取得したいのでDistinctはうまく使えませんでした。 どなたか詳しい方、方法を教えてくださると幸いです。回答お待ちしております。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
比較可能で一意性のある値をもてる項目6をテーブルに追加して、 select T.* from T, (select Item1,min(Item6) as Item6 from T group by item1) W where T.item6=W.item6; ――ってやるのが、一番手っ取り早いと思います。 他のところに影響がでないのであればですが。 oracleならrowidを使うとか、レコードの更新時刻を突っ込むとか。
その他の回答 (3)
- taka_tetsu
- ベストアンサー率65% (1020/1553)
Oracleだったらこれでもありかと。 select 項目1, 項目2, 項目3, 項目 from テーブル名 where rowid = (select min(rowid) from テーブル名 group by 項目1)
SELECT 項目名1, Min(項目名2) AS Alias, 項目名3, 項目名4 FROM テーブル GROUP BY 項目名1, 項目名3, 項目名4
- guruguru2
- ベストアンサー率29% (39/132)
うむむ…。エクセルを使うことはだめなのでしょうか?SQLのみで?
お礼
ご回答ありがとうございます。 仕事の都合上、リアルタイムでデータベースを操作するSQLを書かねばならないのでエクセルを使うことはできません(^^; せっかくのご意見ですが申し訳ありません。
補足
ご回答ありがとうございます。 教えていただいたSQL文についてですが、土日は会社が休みなため月曜日あたりに試してみたいと思います。 ところで、そのSQL文ではSelect文で項目名2に対してMin()を利用して1つの行を選択していますよね。 疑問なのですが、何故項目名1の重複を排除したいのに項目名2に対して条件を設定しているのでしょうか? また、質問の補足ですが、 項目名1と同様に項目名2~4にも重複する値が存在することがあります(一意でない)。 引き続き回答よろしくお願いいたします。