我有一个生成以下输出的查询:
| columnA |
-----------
| 5 |
-----------
| 2 |
-----------
| 3 |
-----------
| 4 |
-----------
是否有一个解决方案,我可以生成另一个列与columnA完全相同(让我们为它命名 - columnB),并从columnA向下移动的值。以下是期望的输出:
| columnA | columnB |
---------------------
| 5 | 0 | -> put zero for 1st row
---------------------
| 2 | 5 | -> original value from 1st row of columnA
---------------------
| 3 | 2 | -> original value from 2nd row of columnA
---------------------
| 4 | 3 | -> original value from 3rd row of columnA
---------------------
这是关于我的问题。
答案 0 :(得分:2)
IN PL / SQL:
-- this gets just the first line
select A A1, null A2 from
(select A from TABLE)
where rownum = 1
union all
-- this gets the rest of the lines
select Q1.A A1, Q2.A A2 from
(select A, rownum RN from (select A from TABLE)) Q1
join
(select A, rownum RN from (select A from TABLE)) Q2
on Q1.RN = Q2.RN + 1
(从TABLE中选择A)是提供原始列表的内部查询。经过测试并做你想做的事。可能应该以某种方式对多次出现的查询进行别名,但我不知道如何做到这一点。
您也可以替换
(select A, rownum RN from (select A from TABLE))
与
(select A, rownum RN from TABLE))
如果您不介意修改原始查询。
答案 1 :(得分:1)
在Transact SQL中:
WITH main AS (SELECT ROW_NUMBER() OVER (ORDER BY ColumnA ASC) as rownum,
ColumnA
FROM MainQuery)
SELECT ISNULL(parent.ColumnA,0) as ColumnA,
ISNULL(child.ColumnA,0) as ColumnB
FROM main parent FULL OUTER JOIN main child
ON parent.rownum = child.rownum + 1
将“MainQuery”替换为生成原始columnA的查询。
这会产生零,其中两列不重叠(即第一行和最后一行)。正如骰子和马克班尼斯特所提到的那样,如果没有某种排序,排位是毫无意义的。这是由
捕获的ROW_NUMBER() OVER (ORDER BY ColumnA ASC)
需要将其更改为您希望如何订购数据。