SQL使用每组的第一个数据填充空白行

时间:2017-08-17 02:21:31

标签: sql sql-server

这是我的原始数据的结果集。 我想要的是填充列的下一个空白行 名称,每个组的名字。

在此示例中,应填充rowid 1881和1879 MAR ROXAS和1881-1887填写了RODRIGO DUTERTE等等。

enter image description here

1 个答案:

答案 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;

您也可以使用类似结构的相关子查询来表达这一点。