質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
GROUP BY

GROUP BYとはSQL文のひとつで、SELECT文において特定の列の値が等しい行ごとに表をグループ化します。

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

Oracle Database 11g

Oracle DatabaseはRDBMSの商品です。具体的な発売商品として知られているのが、 Oracle9i、Oracle10g、Oracle 11gとOracle 12cです。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

3回答

6965閲覧

半角・全角を区別しない重複するレコードの抽出

xxx8

総合スコア41

GROUP BY

GROUP BYとはSQL文のひとつで、SELECT文において特定の列の値が等しい行ごとに表をグループ化します。

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

Oracle Database 11g

Oracle DatabaseはRDBMSの商品です。具体的な発売商品として知られているのが、 Oracle9i、Oracle10g、Oracle 11gとOracle 12cです。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2018/08/30 00:27

編集2018/08/30 07:30

前提・実現したいこと

該当するテーブルから重複したデータの抽出を行いたいです。
そのとき、特定の列の値の「半角」「全角」を区別しないという条件をつけたいです。

詳細

以下のようなテーブルがあったとします。

■商品テーブル

 メーカー   用途     種別    型番  販売開始日  在庫
アディダス | サッカー用品  | スパイク | AAA   | 2018/08/10 | 有
アディダス | サッカー用品  | スパイク | AAA | 2018/08/10 | 有
アディダス | 野球用品    | バッド  | BBB   | 2018/06/01 | 有
ナイキ   | サッカー用品  | スパイク | CCC   | 2018/05/01 | 無
ナイキ   | 野球用品    | グローブ | DDD   | 2018/08/20 | 無
ナイキ   | 野球用品    | バッド  | EEE   | 2018/04/05 | 有
プーマ   | 陸上用品    | ジャージ | FFF   | 2018/03/01 | 有
プーマ   | 陸上用品    | ウェア  | GGG   | 2018/02/01 | 有
アシックス | 陸上用品    | ジャージ | HHH   | 2017/12/01 | 有
アシックス | 陸上用品    | ウェア  | FFF   | 2018/06/10 | 有

抽出したい条件は以下の通りです。
・メーカー、用途、種別、型番、販売開始日が同一のレコード
・型番は、英字の大文字/小文字、英数字・カタカナの半角/全角の区別はしない


この場合、1行目と2行目のレコードが該当します。

該当のSQL文

まだ途中ではありますが以下にて確認お願い致します。

SELECT * FROM 商品テーブル T1 LEFT JOIN ( SELECT メーカー , 用途 , 種別 , 型番 , 販売開始日 , COUNT(*) AS CNT FROM 商品テーブル GROUP BY メーカー , 用途 , 種別 , 型番 , 販売開始日 ) T2 ON T1.メーカー = T2.メーカー AND T1.用途 = T2.用途 AND T1.種別 = T2.種別 AND T1.型番 = T2.型番 AND T1.販売開始日 = T2.販売開始日 WHERE T2.CNT > 1

補足情報(FW/ツールのバージョンなど)

[DB]
OS Windows Server 2012 R2
Oracle11g R2

的外れなSQL文かと思いますが
どうしても抽出条件を満たす文が分かりません。

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

過去の質問です。
https://teratail.com/questions/79442#reply-124958

これでは不十分ですか?

投稿2018/08/30 00:44

spookybird

総合スコア1803

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

xxx8

2018/08/30 01:02

ご回答、ありがとうございます。 リンク拝見させていただきました。 --以下引用 WHERE REGEXP_LIKE(name, '.*apple.*', 'i') はいかがでしょうか? 'i' が "大/小文字区別なしの一致" を意味しています。 -- 上記の場合、「name」列に対して「apple」の大/小文字区別なしとされていますが、 「name」列に対しての大/小文字区別なしの対象の値が分からない場合はどうするのでしょうか。 つまり「apple」に該当するところには 重複がある「型番」をいれたいですがわかりません。
guest

0

ベストアンサー

全角/半角変換の関数などは無いので、TRANSLATEで変換して下さい。
使用頻度が高いようなら、変換用の文字列を返却するストアドを作っておくと便利です。

投稿2018/09/02 17:21

sazi

総合スコア25173

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

xxx8

2018/09/03 06:50

ご回答ありがとうございます。
guest

0

正規表現以外の方法で、英字の大文字小文字変換はUPPER, LOWER。英数字のシングルバイトマルチバイト変換は TO_SINGLE_BYTE, TO_MULTI_BYTE が使えます。

ひらがなやカタカナの変換はOracleのバージョンによってはUTL_I18N が使えます。

通常はこんな変換をしないで済むようにきちんとテーブル設計します。

投稿2018/09/02 10:25

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

xxx8

2018/09/03 06:49

ご回答ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問