質問

この開始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(包括的)の間に数字が登場し、値が上昇するのと同じくらい多くの行に1行あたりの行がある結果セットを生成するにはどうすればよいですか?

つまり、次の結果セットを見たいです。

Section  Unit
1        1
1        2
1        3
1        4
1        5
2        0
2        1
2        2
3        1

セクションCTEの値の一部はパラメーターになるため、組合を適切な数に拡張するほど簡単ではないことに注意してください。

アップデート

私はこれについてもう少し考えて、別のガイドラインを持っています。正しい答えはどんな答えも受けますが、特に誰かが、前のCTEを中央に追加しないことでConnectを使用してこれを行う方法を示すことを望んでいました...

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
)

しかし、私はここから逃げています。なぜなら、それはデュアルから選択されるのではなく、テーブルから来るかもしれないからです。それでは、セクションCTEが実際にテーブルからの簡単なクエリであると仮定しましょう。

SELECT Section, StartUnit, EndUnit FROM SectionData WHERE CallerID = 7

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

役に立ちましたか?

解決

これを試して:

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の値を調整することをお勧めします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top