2016-04-21 4 views
1

Ich bin neu in stackoverflow und ich habe eine Frage, die Ihre Hilfe brauchen. Ich habe eine Tabelle ähnlich wie unten:SQL Server 2008 - Wie leere Zeilen mit Daten in anderen Zeilen gefüllt werden (entweder vor oder nach leeren Zeilen)

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 

Was ich tun möchte, ist:

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 

Jede Hilfe wäre sehr geschätzt. Danke Ihnen allen im Voraus.

Antwort

0

können Sie diese Using APPLY
Diese Abfrage tun:

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

Dank! Es klappt! – KKKZoo

Verwandte Themen