如何将矩阵数据转换为列
How to convert matrix data into columns
您好,我的 Oracle 数据库的一个单列中有数千条记录 table 像这样
我想借助 SQL 查询在 4 列中显示数据
这是我想要的结果
所以在这个例子中,我总共有 24 条记录,我想每列显示 6 条记录
使用 PIVOT
:
SELECT A, B, C, D
FROM (
SELECT value,
MOD( ROWNUM - 1, 4 ) AS col,
CEIL( ROWNUM / 4 ) AS rn
FROM table_name
)
PIVOT( MAX( value ) FOR col IN (
0 AS A,
1 AS B,
2 AS C,
3 AS D
) )
ORDER BY rn;
因此,如果您的数据是:
CREATE TABLE table_name ( value ) AS
SELECT ROUND(DBMS_RANDOM.VALUE(1,1000))
FROM DUAL
CONNECT BY LEVEL <= 25;
然后输出:
A | B | C | D
--: | ---: | ---: | ---:
754 | 622 | 265 | 181
566 | 801 | 844 | 320
938 | 377 | 919 | 306
921 | 402 | 737 | 143
562 | 94 | 868 | 790
617 | 809 | 437 | 469
264 | null | null | null
db<>fiddle here
您好,我的 Oracle 数据库的一个单列中有数千条记录 table 像这样
我想借助 SQL 查询在 4 列中显示数据
这是我想要的结果
所以在这个例子中,我总共有 24 条记录,我想每列显示 6 条记录
使用 PIVOT
:
SELECT A, B, C, D
FROM (
SELECT value,
MOD( ROWNUM - 1, 4 ) AS col,
CEIL( ROWNUM / 4 ) AS rn
FROM table_name
)
PIVOT( MAX( value ) FOR col IN (
0 AS A,
1 AS B,
2 AS C,
3 AS D
) )
ORDER BY rn;
因此,如果您的数据是:
CREATE TABLE table_name ( value ) AS
SELECT ROUND(DBMS_RANDOM.VALUE(1,1000))
FROM DUAL
CONNECT BY LEVEL <= 25;
然后输出:
A | B | C | D --: | ---: | ---: | ---: 754 | 622 | 265 | 181 566 | 801 | 844 | 320 938 | 377 | 919 | 306 921 | 402 | 737 | 143 562 | 94 | 868 | 790 617 | 809 | 437 | 469 264 | null | null | null
db<>fiddle here