2016-04-21 163 views
1

我是新来的stackoverflow,我有一个问题,需要你的帮助。我有类似下面的表格:SQL Server 2008 - 如何用其他行中的数据填充空白行(在空白行之前或之后)

ID, Date, Type 
1 1/1/16 
1 2/1/16 
1 3/1/16 Apple 
1 4/1/16 
1 5/1/16 
1 6/1/16 
2 1/1/16 Pear   
2 2/1/16   
2 3/1/16 Apple  
2 4/1/16   
2 5/1/16 Banana  
2 6/1/16   
3 1/1/16 
3 2/1/16 
3 3/1/16 
3 4/1/16 
3 5/1/16 
3 6/1/16 Pear 

我想要做的是:

ID, Date, Type 
1 1/1/16 Apple 
1 2/1/16 Apple 
1 3/1/16 Apple 
1 4/1/16 Apple 
1 5/1/16 Apple 
1 6/1/16 Apple 
2 1/1/16 Pear   
2 2/1/16 Pear   
2 3/1/16 Apple  
2 4/1/16 Apple  
2 5/1/16 Banana  
2 6/1/16 Banana  
3 1/1/16 Pear 
3 2/1/16 Pear 
3 3/1/16 Pear 
3 4/1/16 Pear 
3 5/1/16 Pear 
3 6/1/16 Pear 

任何帮助将不胜感激。预先感谢你们。

回答

0

你可以做到这一点Using APPLY
尝试此查询:

SELECT t.id 
, t.date 
, t.type 
, IsNull(t.[type], z.[type]) AS NewType 
FROM t 
OUTER APPLY 
(SELECT x.[type] 
    FROM t AS x 
    WHERE x.date = 
    IsNull(
     (SELECT Max(p.date) AS pd FROM t AS p WHERE p.id = t.id AND p.date < t.date AND p.[type] Is Not Null) --Prev Not Null 
    , (SELECT Min(n.date) AS nd FROM t AS n WHERE n.id = t.id AND n.date > t.date AND n.[type] Is Not Null) --Next Not Null 
    ) AND x.id = t.id 
) z 
+0

谢谢!有用! – KKKZoo