首页 > 解决方案 > 列第 2 行的值复制到下一列的第 1 行

问题描述

该表如下所示。

DROP TABLE #TEMP
CREATE TABLE #TEMP
(
    UVRID VARCHAR(20),  
    DynamoNo INT,
    FREQHZ INT
)

INSERT #TEMP    
SELECT '15AL78',100,10 UNION ALL
SELECT '15AL78',110,20 UNION ALL
SELECT '257T13',100,10 UNION ALL
SELECT '257T13',110,20 UNION ALL
SELECT '257T13',931,30

我试图让 1 个新列说SuprerFrez其值取决于 column FREQHZ

对于每个UVRID组,第二个值FREQHZ将是第一个值,SuprerFrez 对于最后一个FREQHZSuprerFrez值将为零。

1 个新列的预期输出,其值取决于FREQHZ列。订购方式FREQHZ ASC

UVRID   |DynamoNo|FREQHZ|SuprerFrez
'15AL78'|100     |10    |20
'15AL78'|110     |20    |0
'257T13'|100     |10    |20
'257T13'|110     |20    |30
'257T13'|931     |30    |0

标签: sqlsql-servertsql

解决方案


您正在寻找lead()

select t.*,
       lead(FREQhz, 1, 0) over (partition by UVRID order by DynamoNo) as SuprerFrez
from #temp t;

请注意,这假定排序是 by DynamoNo。如果这不是您想要的顺序,那么您需要另一列来指定顺序。例如,如果您想要“插入”订单,您可以使用一identity列:

CREATE TABLE #TEMP (
    TempID INT IDENTITY(1, 1) PRIMARY KEY,
    UVRID VARCHAR(20),  
    DynamoNo INT,
    FREQHZ INT
);

然后代码将如下所示:

select t.*,
       lead(FREQhz, 1, 0) over (partition by UVRID order by TempID) as SuprerFrez
from #temp t;

推荐阅读