首页 > 解决方案 > 如何在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,那也行不通。

标签: sqloracle

解决方案


我认为您也可以使用 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 子句及其引用替换为您的实际表即可。


推荐阅读