こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

オラクルの文法を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
-------------
AA1
AAA1
BBB1
BBBB1
CCC2
DDD2
EE2
FFFF2
ZZZZZ1

上記の場合
row_number() over (partition by col1 order by col2 desc) rnk
の行はMySQLでどのように記述したら良いのでしょうか?

皆様お忙しい中、もし知っている方がいらっしゃいましたらご回答を宜しくお願い致します。

投稿日時 - 2015-06-03 11:21:50

QNo.8987327

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.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としてます・・・

投稿日時 - 2015-06-16 15:54:06