• 締切済み

オラクルの文法をMySQLにて記述したい

私の質問内容を見て頂きありがとうございます。 もう1件の質問内容のある程度のところまで詰めることができたのですが 1点困っていることがあり、またネット上でも理解できる内容が見つからなかったためこちらに質問させて頂きます。 オラクルにて --元テーブル CREATE TABLE T_TEST_4 ( KEY VARCHAR2(8), NAME VARCHAR2(255) ) --元テーブルのデータ KEY NAME ------------------------------ 1 AA,AAA,BBB,BBBB,ZZZZZ 2 CCC,DDD,EE,FFFF --SQL /* SplitSQL */ select col1, col2 from( select col1, col2, row_number() over (partition by col1 order by col2 desc) rnk from( select substr( name, case rn when 1 then 1 else instr(name, delm, 1, rn - 1) + 1 end ,case rn when 1 then case instr(name, delm, 1, rn) when 0 then length(name) else instr(name, delm,1,rn)-1 end when nvl(length(translate(name, delm || name, delm)), 0) + 1 then length(name) else instr(name,delm,1,rn)-1-instr(name,delm,1,rn-1) end ) col1, key col2 from T_TEST_4, (select ',' delm from dual) b, (select rownum rn from all_catalog) c where rn <= nvl(length(translate(name,delm || name, delm)),0) + 1 ) ) where rnk = 1 order by col1; --SQL実行結果 COL1  COL2 ------------- AA 1 AAA 1 BBB 1 BBBB 1 CCC 2 DDD 2 EE 2 FFFF 2 ZZZZZ 1 上記の場合 row_number() over (partition by col1 order by col2 desc) rnk の行はMySQLでどのように記述したら良いのでしょうか? 皆様お忙しい中、もし知っている方がいらっしゃいましたらご回答を宜しくお願い致します。

みんなの回答

回答No.1

ながっ! 全部見てないし、動作確認してないけど・・・、 部分的には相関サブクエリを使うしかありません。 row_number() over (partition by col1 order by col2 desc) rnk ↓ (select count(*) from T_TEST_4 t2 where t2.col1 = t1.col1 and t2.col2 >= t1.col2) as rnk ※元のテーブルのエイリアスをt1としてます・・・

関連するQ&A