アプリ版:「スタンプのみでお礼する」機能のリリースについて

只今、SQL文を作成していますが、方法が分からず困っております。
どなたかスキルのある方で、解決方法を教えて頂けないでしょうか?

商品名と親コードというカラムがあり、
以下のような文字列があります。

商品名       親コード
-----------------------------
商品名のサンプルA  123456 
商品名のサンプルB  123456
商品名のサンプルC  123456
◆商品名のサンプルD 123456
商品名D       789012
商品名E       789012

この中から、親コードで集計して、左側前方から
「商品名の共通部分」だけを抜き出したいのですが、
どのようにSQL文を書けばよいでしょうか?
親コード123456の中で、一つだけ例外で◆から始まる
商品名がありますが、それは無視します。

取り出したい結果の例
商品名のサンプル  123456
商品名       789012

何卒、宜しくお願いします。

A 回答 (2件)

分析関数で無理矢理に・・


select distinct *
from (
select
コード,
replace(translate(商品名,translate(商品名,lead(商品名) over(partition by コード order by length(商品名)),' '),' '),' ','') 共通商品名
from T
)
where 共通商品名 is not null;
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/06/19 09:55

こんにちは。

私にスキルがあるかは不明ですが(笑

正規表現で不要な部分を空白置換してやって、集計後の結果に
結合してやれば出来そうな気がします。
10g限定ですが、参考になれば。

■Sample
----------------------------------------------------------------------
CREATE TABLE T_TEST
(
SYOHIN_MEIVARCHAR2(100)
,CODENUMBER
);

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
;
----------------------------------------------------------------------
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/06/19 09:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す