簡體   English   中英

更新同一表SQL中表的值

[英]Update values from table in same table SQL

我有一個要更新的SQL表

NAME   DATE        Tenor    Value
Item1  2016/01/01  1        0.1
Item1  2016/01/01  2        0.15
Item1  2016/01/01  3        0.16
Item1  2016/01/02  1        0.17
Item1  2016/01/02  2        0.18
Item1  2016/01/02  3        0.19
Item2  2016/01/01  1        0.11 

我想用每個期限的“ 2016/01/01”更新“ 2016/01/02”上“ Item1”的值。 例如。

對於2016/01/02和Tenor 1,請更新為2016/01/01和Tenor 1。

對於2016/01/02和Tenor 2,更新為2016/01/01和Tenor 2。

有沒有一種簡單的方法可以使我在不對男高音進行硬編碼的情況下更改表? 我的桌子很大,有很多選擇。 但是,日期的期限是相同的,我將對日期和名稱進行硬編碼。

提前致謝

您需要使用SELF JOIN

UPDATE a
SET    a.Value = b.Value
FROM   yourtable a
       JOIN yourtable b
         ON a.NAME = b.NAME
            AND a.Tenor = b.Tenor
            AND a.DATE = Dateadd(dd, 1, b.DATE) 

使用子選擇的好處是,如果返回的值不止一個,則會出現錯誤。 使用聯合更新可能會導致意外結果...

CREATE TABLE tbl (NAME VARCHAR(100),[DATE] DATE,Tenor INT,Value DECIMAL(4,2));
INSERT INTO tbl VALUES
 ('Item1',{d'2016-01-01'},1,0.1)
,('Item1',{d'2016-01-01'},2,0.15)
,('Item1',{d'2016-01-01'},3,0.16)
,('Item1',{d'2016-01-02'},1,0.17)
,('Item1',{d'2016-01-02'},2,0.18)
,('Item1',{d'2016-01-02'},3,0.19)
,('Item2',{d'2016-01-01'},1,0.11);

SELECT * FROM tbl;

UPDATE tbl SET Value=(SELECT tbl2.Value 
                       FROM tbl AS tbl2
                       WHERE tbl2.NAME=tbl.NAME 
                         AND tbl2.Tenor=tbl.Tenor
                         AND tbl2.[DATE]={d'2016-01-01'})
WHERE [DATE]={d'2016-01-02'};

SELECT * FROM tbl;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM