[英]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.