- 締切済み
困っています。ORACLE_SQL 複数の文字列から共通部分を抜き出す方法
只今、SQL文を作成していますが、方法が分からず困っております。 どなたかスキルのある方で、解決方法を教えて頂けないでしょうか? 商品名と親コードというカラムがあり、 以下のような文字列があります。 商品名 親コード ----------------------------- 商品名のサンプルA 123456 商品名のサンプルB 123456 商品名のサンプルC 123456 ◆商品名のサンプルD 123456 商品名D 789012 商品名E 789012 この中から、親コードで集計して、左側前方から 「商品名の共通部分」だけを抜き出したいのですが、 どのようにSQL文を書けばよいでしょうか? 親コード123456の中で、一つだけ例外で◆から始まる 商品名がありますが、それは無視します。 取り出したい結果の例 商品名のサンプル 123456 商品名 789012 何卒、宜しくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- k_o_r_o_c_h_a_n
- ベストアンサー率55% (526/942)
分析関数で無理矢理に・・ select distinct * from ( select コード, replace(translate(商品名,translate(商品名,lead(商品名) over(partition by コード order by length(商品名)),' '),' '),' ','') 共通商品名 from T ) where 共通商品名 is not null;
こんにちは。私にスキルがあるかは不明ですが(笑 正規表現で不要な部分を空白置換してやって、集計後の結果に 結合してやれば出来そうな気がします。 10g限定ですが、参考になれば。 ■Sample ---------------------------------------------------------------------- CREATE TABLE T_TEST ( SYOHIN_MEI VARCHAR2(100) ,CODE NUMBER ); INSERT INTO T_TEST VALUES('商品名のサンプルA' ,'123456'); INSERT INTO T_TEST VALUES('商品名のサンプルB' ,'123456'); INSERT INTO T_TEST VALUES('商品名のサンプルC' ,'123456'); INSERT INTO T_TEST VALUES('◆商品名のサンプルD' ,'123456'); INSERT INTO T_TEST VALUES('商品名D','789012'); INSERT INTO T_TEST VALUES('商品名E','789012'); COMMIT; SELECT * FROM (SELECT CODE ,REGEXP_REPLACE(SYOHIN_MEI,'[A-Z]*$','') COMMON_STR FROM T_TEST WHERE SYOHIN_MEI NOT LIKE '◆%' ) GROUP BY CODE ,COMMON_STR ; ----------------------------------------------------------------------
お礼
ご回答誠にありがとうございます。 品番のところは、実際にはいろいろな文字が入っています。この方法では解決できませんでした・・・。
お礼
ご回答誠にありがとうございます。 検証してみます。