2016-03-31 3 views
0

mit Es ist geschaffen mit der Verwendung von ID, aber ich mag, ohnemit vorherigem Wert Nullwert ersetzen, ohne ID in SQL Server 2008

ID mit
SELECT 
     ID 
     ,COALESCE(p.number, 
      (SELECT TOP (1) number 
      FROM tablea AS p2 
      WHERE 
       p2.number IS NOT NULL 
       AND p2.ID <= p.ID ORDER BY p2.ID DESC))as Number--,Result = p.number 
    FROM TableA AS p; 

ID number 
1 100 
2 150 
3 NULL 
4 300 
5 NULL 
6 NULL 
7 450 
8 NULL 
9 NULL 
10 560 
11 NULL 
12 880 
13 NULL 
14 579 
15 987 
16 NULL 
17 NULL 
18 NULL 
+0

'ID' verwendet wird, um die Reihenfolge der Zeilen zu definieren. Wenn Sie andere Spalten haben, die die Reihenfolge definieren, verwenden Sie sie. Wenn Sie keine solche Spalte haben, fügen Sie sie hinzu. Irgendwie müssen Sie dem Server sagen, was "vorherige" Zeile bedeutet. –

+0

Wir können mit ROW_NUMBER() tun .. Aber ich weiß nicht, wie man es benutzt – Brinda

Antwort

0

Diese Abfrage. Dies wird Ihnen helfen, das gewünschte Ergebnis zu erhalten. Diese Abfrage wird in SQL Server 2008 R2 geschrieben.

WITH CTE AS 
(SELECT id, number FROM tablea) 
SELECT A.id, A.number, ISNULL(A.number,B.number) number 
FROM CTE A 
OUTER APPLY (SELECT TOP 1 * 
FROM CTE 
WHERE id < a.id AND number IS NOT NULL 
ORDER BY id DESC) B 

Sie können versuchen, LAG und LEAD-Funktionen in SQL Server 2012/