如何在 SQL (Oracle) 中创建一个 n*n 的结果集?

How to create a result set of n*n in SQL (Oracle)?

我需要创建一个包含 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

出于这个原因,我需要来自我的数据库的有序结果集,returns 笛卡尔积 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
 ...

我尝试在同一个数字 table 之间创建交叉连接两次,

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
 ...

感谢任何帮助,对于我的问题的奇怪描述,我们深表歉意。

您可以使用连接方式生成数字,并使用除法和取模来生成行和值。计算本身很简单,但是您需要几个 +1-1,因为 level1 而不是 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