SQL查询将数字列表转换为2列

时间:2011-09-13 09:16:20

标签: sql

如何编写查询以将数字列表转换为2列 例如我有一个ID列的表格,其值为(3,6,9,12,15,18)。

我想要一个看起来像

的结果
ID        NEXT_ID
3         6
6         9
9         12
12        15
15        18

请注意,这适用于任何id的序列,不一定是3的倍数 我正在研究Oracle 11.2

3 个答案:

答案 0 :(得分:3)

SELECT first.ID, min(second.ID) as NEXT_ID
FROM TABLE_NAME first, TABLE_NAME second
WHERE first.ID < second.ID
GROUP BY first.ID

答案 1 :(得分:1)

您可以将Oracle analytical functions用于此目的

SELECT ID, LEAD(ID, 1) OVER (ORDER BY ID) AS NEXTID
FROM TABLE

答案 2 :(得分:0)

F.Y.I。这是mysql中许多可能的解决方案之一(也可能适用于oracle,但我不知道)。

以下脚本基本上可以直接执行,并且会导致:

Id  Next
=== ====
3   6
6   9
9   12
12  15
15  18

这是剧本。

CREATE TABLE `Numbers` (
    `Id` INT NOT NULL PRIMARY KEY
);

INSERT INTO `Numbers` (`Id`) VALUES (3), (6), (9), (12), (15), (18);

SELECT 
     `Number`.`Id`
    ,`Next`.`Id` AS `Next`
FROM `Numbers` AS `Number`
LEFT JOIN `Numbers` AS `Next` 
    ON  `Next`.`Id` > `Number`.`Id`
GROUP BY
    `Number`.`Id`
HAVING
    `Next`.`Id` = MIN(`Next`.`Id`);