sql - 如何在oracle中将一列多行划分为不同的列?
问题描述
我想以下列分为两个不同的列
表 x
ID
1
2
.
.
10
--输出应该是这样的
A B
-- --
1 6
2 7
3 8
4 9
5 10
我试过这个,但不会工作
SELECT (SELECT * FROM x WHERE id BETWEEN 1 AND 5),
(SELECT * FROM x WHERE id BETWEEN 6 AND 10)
FROM dual;
也使用了SUBSTR,那也行不通。
解决方案
我认为您也可以使用 LEAD 功能来完成您的任务。这是一个例子:
WITH x (val) AS
(
SELECT ROWNUM
FROM dual
CONNECT BY ROWNUM < 12
)
SELECT *
FROM (SELECT val AS A,
LEAD(val, (SELECT CEIL(COUNT(*)/2) FROM x)) OVER (ORDER BY val) AS B
FROM x
ORDER BY val)
WHERE ROWNUM <= (SELECT CEIL(COUNT(*)/2) FROM x);
您只需将查询中的 WITH 子句及其引用替换为您的实际表即可。