鉴于此起始 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
),
如何生成一个结果集,该结果集在 Section 中每行的行数与 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
原来的问题仍然存在。