首页 > 解决方案 > 面临填充下一个可用已知值以使用 SQL 替换空值的问题

问题描述

我的输入数据集如下。

我正在尝试用该年的下一个可用值填充空值(年份和季度)。这将有助于公司完全获得年度数据。

当前数据集:

在此处输入图像描述

预期数据集:

在此处输入图像描述

关于如何实现这一目标的任何指示?

标签: sqlsql-server

解决方案


这仅在您有一年的情况下才有效,否则您将需要一列来确定顺序。

如果要选择

Select company
      ,year    = coalesce(year,min(year) over (partition by company))
      ,Quarter = coalesce(quarter,min(quarter) over (partition by company))
 From  @YourTable

如果要更新

Declare @YourTable table (company varchar(50), year int,quarter varchar(50))
Insert Into @YourTable values
 ('abc',null,null)
,('abc',2015,'Q2')
,('abc',2015,'Q3')
,('pqr',null,null)
,('pqr',null,null)
,('pqr',2015,'Q3')

;with cte as (
Select *
      ,NYear = min(year) over (partition by company)
      ,NQtr  = min(quarter) over (partition by company)
 From @YourTable
)
Update cte
  set  Year   =NYear 
      ,Quarter=NQtr
 Where Year is null

更新的表格

company year    quarter
abc     2015    Q2
abc     2015    Q2
abc     2015    Q3
pqr     2015    Q3
pqr     2015    Q3
pqr     2015    Q3

推荐阅读