2015-09-28 93 views
-2

我剛創建了一個列調用UPDATE在我的表上,我想根據我的數據填充它。遞歸更新

每次對象從主鍵被改變(ID,YEAR)我想更新列UPDATE

||  ID  ||  YEAR  ||  OBJECT  ||  UPDATE 
    1    2010     1     2010 
    2    2010     2     2010 
    3    2011     3     2011 
    1    2011     1     2010 
    2    2011     1     2011 
    3    2011     1     2011 

我不知道有多少查詢已經和幾年。但我只有幾個對象

我會感激您對根據您所提供的例子

+1

你到目前爲止嘗試了什麼?你的問題是什麼? – Pred

+0

爲什麼你需要'更新'列? –

+0

我甚至不知道如何開始。我想用腳本更新列表UPDATE。 – xoum89

回答

1

的幫助,這是應該提供更新列所示問題的SQL。

UPDATE t 
SET UPDATE=ISNULL(minyear.[MinYear],Year) 
FROM Table t 
LEFT JOIN (
    SELECT ID,OBJECT,MIN(YEAR) [MinYear] 
    FROM TABLE 
    GROUP BY ID,OBJECT 
) minyear on minyear.ID=t.ID 
    AND minyear.OBJECT=t.OBJECT 
1

如果您正在使用SQL Server 2012+那麼你可以使用LAG獲得以前值:

;WITH ToUpdate AS (
    SELECT ID, YEAR, OBJECT, [UPDATE], 
      COALESCE(LAG(YEAR) OVER (PARTITION BY OBJECT 
            ORDER BY YEAR, ID), 
        YEAR) AS prevYear 
    FROM mytable 
) 
UPDATE ToUpdate 
SET [UPDATE] = prevYear 

更新的CTE進行傳播到真正的數據庫表。因此,UPDATE操作使用前一記錄的值填充[UPDATE]字段。

注:LAG獲取的以前YEAR值,通過ORDER BY YEAR, ID條款定義。如果沒有以前的值,則[UPDATE]設置爲等於YEAR相同記錄的值。

Demo here