在Oracle中相关的行生成查询
-
15-10-2019 - |
题
鉴于此开始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
请注意,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
)
但是我在这里倾斜,因为它可能来自桌子,而不是从dual中选择。因此,让我们假设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的值。
不隶属于 StackOverflow