1

この開始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

そして、元の質問はまだ残っています。

4

1 に答える 1

0

これを試して:

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
), 
Numbers AS (
   SELECT ROWNUM-1 n
   FROM   DUAL
   CONNECT BY LEVEL < 1000
)
select section, n
from sections, numbers
where n between startunit and endunit
order by section, n;

私が使用した1000の値を調整することをお勧めします。

于 2011-01-25T11:35:13.403 に答える