2012-07-18 70 views
-1

替代的NA我有一個巨大的表是這樣的:SQL:與去年觀察

Date Price1 Price2 
1  13  14.9 
2  13.1  NULL 
3  NULL  14 
4  NULL  14.5 
5  13  14 

我要填寫在NAS讓我在SQL表如下所示:

Date Price1 Price2 
1  13  14.9 
2  13.1  14.9 
3  13.1  14 
4  13.1  14.5 
5  13  14 

我對SQL很陌生,請原諒。我在這裏搜索,似乎你可以在R中做到這一點,但我應該怎麼做在SQL中。

我正在使用Microsoft SQL Server Management。另外我似乎無法確定如何正確插入表格,但他們不會讓我發佈圖片。所以,對格式化感到抱歉。

+0

你如何決定把NA,而不是哪個值?我看到你用13.9和Price2 NAs替換了Price1 NAs和14.9,但你是怎麼得出這個確切數字的?從之前的日期前的價格? – 2012-07-18 14:15:27

+0

如果它是NA,則用最後一天的可用價格替換它。 – Zanam 2012-07-18 14:23:56

+0

那麼,那麼@Chandu提供的答案將完成這項工作,除非你在Sql Server 2000上。 – 2012-07-18 14:25:04

回答

1

試試這個:

UPDATE a 
    SET a.Price1 = b.Price1 
    FROM <YOUR-TABLE> a CROSS APPLY 
    (
     SELECT TOP 1 Price1 
      FROM <YOUR-TABLE> b 
     WHERE a.Date > b.Date 
      AND Price1 <> 'NA' 
      ORDER BY b.Date DESC 
    ) b 

    UPDATE a 
    SET a.Price2 = b.Price2 
    FROM <YOUR-TABLE> a CROSS APPLY 
    (
     SELECT TOP 1 Price2 
      FROM <YOUR-TABLE> b 
     WHERE a.Date > b.Date 
      AND Price2 <> 'NA' 
      ORDER BY b.Date DESC 
    ) b 
+0

然後重複整個表格,每次更改一行時。 Blecch。 – 2012-07-18 14:17:33

+0

@Aaron Bertrand:我怎麼樣?我是初學者,請耐心等待。 – Zanam 2012-07-18 14:24:59

+1

你會使用一個觸發器,但我決不暗示這一點。當您查詢數據而不是*存儲*時,填充這些列是不夠的?您可以在查詢或表示層上執行此操作,而無需運行更新或維護此依賴於其他行的數據。 – 2012-07-18 14:27:25