この開始CTEを考えると:
WITH Sections AS (
SELECT 1 Section, 1 StartUnit, 5 EndUnit FROM DUAL
UNION ALL SELECT 2, 0, 2 FROM DUAL
UNION ALL SELECT 3, 1, 1 FROM DUAL
),
StartUnitとEndUnit(両端を含む)の間にある数値と同じ数の行ごとに、値が昇順である結果セットを生成するにはどうすればよいですか?
つまり、次の結果セットが表示されます。
Section Unit
1 1
1 2
1 3
1 4
1 5
2 0
2 1
2 2
3 1
Sections CTEの値の一部はパラメーターになるため、UNIONを正しい数に拡張するほど簡単ではないことに注意してください。
アップデート
これについてもう少し考えて、別のガイドラインがあります。私は正しい答えを取りますが、特に誰かがCONNECT BY PRIORを使用し、途中で追加のCTEを使用せずにこれを行う方法を示すことを望んでいました...
CTEを次のように変更できることに気づきました。
WITH Sections AS (
SELECT 1 Section, LEVEL Unit FROM DUAL CONNECT BY LEVEL <= 5
UNION ALL SELECT 2, LEVEL - 1 FROM DUAL CONNECT BY LEVEL <= 3
UNION ALL SELECT 3, 1 FROM DUAL CONNECT BY LEVEL <= 1
)
ただし、DUALから選択されるのではなく、テーブルから取得される可能性があるため、ここではそれを避けています。したがって、Sections CTEが実際には、次のようなテーブルからの単純なクエリであると仮定します。
SELECT Section, StartUnit, EndUnit FROM SectionData WHERE CallerID = 7
そして、元の質問はまだ残っています。