Sql 从第二列复制到下一列第一行的值

Sql 从第二列复制到下一列第一行的值,sql,sql-server,tsql,Sql,Sql Server,Tsql,表如下所示 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

表如下所示

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
我试图创建一个新列,名为
superfrez
,其值取决于列
FREQHZ

对于每个
UVRID
组,第二个值
FREQHZ
将是
superfrez
对于最后一个
frequehz
superfrez
值将为零

1个新列的预期输出,其值取决于
FREQHZ
列。订购依据
frequehz 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

您正在寻找
lead()

注意:这假设订购是通过
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;

到目前为止你试过什么?你有没有看过
领先
/
滞后
select t.*,
       lead(FREQhz, 1, 0) over (partition by UVRID order by TempID) as SuprerFrez
from #temp t;