如何将指定名称第二行的Title值填充至其第一行NULL字段并保留该行?
解决SQL中填充同组下一行Title到首行的问题
你需要提取每个Name对应的Row=1的记录,同时把该Name下紧接着的下一行(Row=2)的Title填充到首行的NULL字段中,这里提供几种可行的解决方案:
方法一:使用LEAD()窗口函数(推荐)
LEAD()函数可以直接获取同组内下一行的指定字段值,语法简洁且效率较高,适合MySQL 8.0+、PostgreSQL、SQL Server等支持窗口函数的数据库:
SELECT Name, LEAD(Title) OVER (PARTITION BY Name ORDER BY Row) AS Title, Row FROM table1 WHERE Row = 1;
说明:PARTITION BY Name按姓名分组,ORDER BY Row确保按行号顺序取数,LEAD(Title)会自动获取当前行(Row=1)的下一行(Row=2)的Title值,刚好替换首行的NULL。
方法二:自连接查询
如果你的数据库不支持窗口函数,可以用自连接的方式关联同姓名下的下一行记录:
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;
说明:通过t1.Row + 1关联到同姓名的下一行记录,直接取t2的Title作为结果值。
方法三:子查询方式
也可以通过子查询在SELECT语句中直接获取对应下一行的Title:
SELECT Name, (SELECT Title FROM table1 t2 WHERE t2.Name = t1.Name AND t2.Row = t1.Row + 1) AS Title, Row FROM table1 t1 WHERE Row = 1;
说明:针对每个Row=1的记录,子查询会找到同姓名下Row=2的Title值,填充到当前行的Title字段。
内容的提问来源于stack exchange,提问作者Avrahad
相关产品推荐
相关产品推荐

