sql - 列第 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
对于最后一个FREQHZ
,SuprerFrez
值将为零。
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
解决方案
您正在寻找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;
推荐阅读
- python - 基于2个多对多关系的交集过滤查询的方法
- exception - Mulesoft 4 中的错误处理未按预期工作
- c# - 将 Json 反序列化为 C# 类
- c# - 具有多个参数的休息服务
- excel - 将 SPSS 数据文件导出到 Excel,显示值标签
- amazon-web-services - $_GET 变量在我的 ec2 实例中使用 cloudfront aws 不起作用
- snowflake-cloud-data-platform - Snowflake Python 连接器,connection.execute 触发两个未知 SQL 查询和两个回滚调用
- python - 如何让我的 python 代码每天将一些刮掉的数字保存到某个文件中?
- python - 获取日期时间相关范围的最大值
- c - 实现解析器 - 使用递归下降