我需要创建一个包含n个数字矩阵的报告(BIRT),如下所示:
1 2 3 4 5
2 3 4 5 1
3 4 5 1 2
4 5 1 2 3
5 1 2 3 4
出于这个原因,我需要从我的数据库中获得一个有序的结果集,该结果集返回笛卡尔积n * n,行号和值从行号开始。
ROW VALUE
1 1
1 2
1 3
1 4
1 5
2 2
2 3
2 4
2 5
2 1
3 3
...
我通过两次在同一个数字表之间创建交叉连接来尝试它,
select * from (
(select level as nr from dual connect by level <= 5)
cross join
(select level as nr from dual connect by level <= 5)
);
但只产生
的结果集ROW VALUE
1 1
1 2
...
2 1
2 2
...
任何帮助表示赞赏,并对我的问题的奇怪描述感到抱歉。
答案 0 :(得分:1)
您可以使用connect by生成数字,并使用division和modulo生成行和值。计算本身非常简单,但您需要几个+1
和-1
,因为level
从1
开始,而不是0
select
trunc((level - 1) / N) + 1 as ROWNR,
mod(level - 1 + trunc((level - 1) / N), N) + 1 as VALUE
from
(select 5 /* Here goes your number N */ as N from dual) d
connect by
level <= N*N