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;