• 締切済み

困っています。ORACLE_SQL 複数の文字列から共通部分を抜き出す方法

只今、SQL文を作成していますが、方法が分からず困っております。 どなたかスキルのある方で、解決方法を教えて頂けないでしょうか? 商品名と親コードというカラムがあり、 以下のような文字列があります。 商品名       親コード ----------------------------- 商品名のサンプルA  123456  商品名のサンプルB  123456 商品名のサンプルC  123456 ◆商品名のサンプルD 123456 商品名D       789012 商品名E       789012 この中から、親コードで集計して、左側前方から 「商品名の共通部分」だけを抜き出したいのですが、 どのようにSQL文を書けばよいでしょうか? 親コード123456の中で、一つだけ例外で◆から始まる 商品名がありますが、それは無視します。 取り出したい結果の例 商品名のサンプル  123456 商品名       789012 何卒、宜しくお願いします。

みんなの回答

回答No.2

分析関数で無理矢理に・・ select distinct * from ( select コード, replace(translate(商品名,translate(商品名,lead(商品名) over(partition by コード order by length(商品名)),' '),' '),' ','') 共通商品名 from T ) where 共通商品名 is not null;

2337
質問者

お礼

ご回答誠にありがとうございます。 検証してみます。

noname#87380
noname#87380
回答No.1

こんにちは。私にスキルがあるかは不明ですが(笑 正規表現で不要な部分を空白置換してやって、集計後の結果に 結合してやれば出来そうな気がします。 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 ; ----------------------------------------------------------------------

2337
質問者

お礼

ご回答誠にありがとうございます。 品番のところは、実際にはいろいろな文字が入っています。この方法では解決できませんでした・・・。

関連するQ&A