这是我的原始数据的结果集。 我想要的是填充列的下一个空白行 名称,每个组的名字。
在此示例中,应填充rowid 1881和1879 MAR ROXAS和1881-1887填写了RODRIGO DUTERTE等等。
答案 0 :(得分:1)
理想的方式是lag(ignore nulls)
,但SQL Server不支持。相反,您可以使用两个级别的窗口函数:
select max(name) over (partition by name_rowid) as new_name
from (select t.*,
max(case when name is not null then rowid end) over (order by rowid) as name_rowid
from billtrans t
) t;
上述内容适用于SQL Server 2012+。在SQL Server 2008中,您可以使用效率低得多的方法,例如outer apply
:
select t.*, t2.name as new_name
from billtrans t outer apply
(select top 1 t2
from billtrans t2
where t2.rowid <= t.rowid and t2.name is not null
order by t2.rowid desc
) t2;
您也可以使用类似结构的相关子查询来表达这一点。