2013-03-04 71 views
0

我已經成功地得到這樣的: How to get the end of entry of the first column in TSQL?如何根據序列從其他表中更新?

更新後的數據如下,並設法搞到以及最後更新的記錄。

Service; Sequence; EndSequence 
A, 2089697; 2089737 
B, 2089738; 2089837 
C, 2089838; 2090367 
D, 2090368; 2090399 
E, 2090400; 2090500 

現在我想根據ID的序列開始和結束開始更新其上有100萬條記錄的主表。我可以通過光標做到這一點,但我更喜歡通過正常的查詢。

BTW我使用SQL 2005

主表如下:

ID; Value; Service 
2089697; 23; null 
... 
2090500; 12; null 

這樣的結果將是:

ID; Value; Service 
2089697; 23; A 
... 
2089737; 45; A 
2089738; 45; B 
... 
2089837; 34; B 
2089838; 23; C 
... 

感謝

不是一個

回答

1

更多選項在這裏。

  1. 相關子查詢:

    UPDATE MasterTable 
    SET Service = (
        SELECT s.Service 
        FROM SequenceTable s 
        WHERE MasterTable.ID BETWEEN s.Sequence AND s.EndSequence 
    ) 
    WHERE Service IS NULL 
    ; 
    
  2. 內連接:

    UPDATE MasterTable 
    SET Service = s.Service 
    FROM SequenceTable s 
    WHERE MasterTable.Service IS NULL 
        AND MasterTable.ID BETWEEN s.Sequence AND s.EndSequence 
    ; 
    

    替代語法:

    UPDATE m 
    SET Service = s.Service 
    FROM MasterTable m 
    INNER JOIN SequenceTable s 
        ON m.ID BETWEEN s.Sequence AND s.EndSequence 
    WHERE m.Service IS NULL 
    ; 
    

這兩個選項均假定SequenceTable中的範圍不重疊。

相關問題