表から:
| name | range |
------------------------
| 'Range1' | '456-458' |
| 'Range2' | '11-13' |
この結果を得ようとしているだけです:
| name | range | value |
--------------------------------
| 'Range1' | '456-458' | 456 |
| 'Range1' | '456-458' | 457 |
| 'Range1' | '456-458' | 458 |
| 'Range2' | '11-13' | 11 |
| 'Range2' | '11-13' | 12 |
| 'Range2' | '11-13' | 13 |
ソーステーブルに範囲が1つしかない場合に正常に機能するクエリを作成しました。
WITH data AS (
SELECT 'Range1' name, '456-458' range FROM dual
)
SELECT ROWNUM, name, range, LEVEL value
FROM data, dual
WHERE LEVEL >= to_number(SUBSTR(range, 1, INSTR(range,'-')-1))
CONNECT BY LEVEL <= to_number(SUBSTR(range, INSTR(range,'-')+1));
ただし、2 つの範囲を取る場合は、数万行を返します。
WITH data AS (
SELECT 'Range1' name, '456-458' range FROM dual
UNION
SELECT 'Range2' name, '11-13' range FROM dual
)
SELECT ROWNUM, name, range, LEVEL value FROM data, dual
WHERE LEVEL >= to_number(SUBSTR(range, 1, INSTR(range,'-')-1))
CONNECT BY LEVEL <= to_number(SUBSTR(range, INSTR(range,'-')+1));
このクエリを改善して必要なものを取得することは可能ですか、それとも私のアプローチが最初は間違っていますか?
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production