如何编写查询以将数字列表转换为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
答案 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`);