繁体   English   中英

如何将现有列的第一行填充到第二行的新列中?

[英]How to populate 1st row of existing column into new column of 2nd row?

我有一个生成以下输出的查询:

| 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
---------------------

这是关于我的问题。

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))

如果您不介意修改原始查询。

在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)

哪个需要更改为您希望如何订购数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM