如何用同分组下一行值填充首行NULL?SQL查询实现
解决方案
可以通过两种常见方法实现需求:
方法一:使用窗口函数 LEAD()(推荐)
利用LEAD()窗口函数直接获取同Name分组中下一行的Title值,再替换当前行的NULL值:
SELECT Name, COALESCE(Title, LEAD(Title) OVER (PARTITION BY Name ORDER BY Row)) AS Title, Row FROM table1 WHERE Row = 1;
关键部分说明:
PARTITION BY Name:按Name分组,确保只在同一个用户的行中查找下一行ORDER BY Row:指定分组内的排序规则,保证取到的是紧邻的下一行(即Row=2的记录)COALESCE(Title, ...):因为Row=1的Title为NULL,所以用LEAD()获取的下一行Title替换它
方法二:使用自连接
如果你的SQL环境不支持窗口函数,可以用自连接关联同Name下Row值+1的记录:
SELECT t1.Name, t2.Title, t1.Row FROM table1 t1 INNER JOIN table1 t2 ON t1.Name = t2.Name AND t2.Row = t1.Row + 1 WHERE t1.Row = 1;
逻辑说明:
通过INNER JOIN将Row=1的记录与同Name下Row=2的记录关联,直接取后者的Title值。
内容的提问来源于stack exchange,提问作者Avrahad
相关产品推荐
相关产品推荐

