根据另一列更新列

时间:2015-02-08 17:59:24

标签: sql-server database

我有一个包含四列的表,并希望根据该行的col1更新col4(如果其col3值为false),该行具有col3的真值并且其col2等于更新的col2。 数据就像

Col1 Col2 Col3 Col4

1     JOhn  false   NULL
2     Hony  false   NULL
3     John   true   NULL
4     Rohn  false   NULL
5     Hony  true   NULL

我希望第一行的col4有3个,第二行的col4有5个。

我的查询是

Update tab
set tab.col4 = tab.col1
from table tab
where tab.col3 = true

但它只更新具有真实价值的行。

2 个答案:

答案 0 :(得分:1)

您需要使用自我加入:

UPDATE a
SET    a.col4 = b.col1
FROM   mytable b
JOIN   (SELECT col1, col2
        FROM   mytable
        WHERE  col3 = true) b ON a.col2 = b.col2
WHERE  col3 = false

答案 1 :(得分:1)

刚试过SQL Fiddle

create table tbl_SO_19
(
col1 int,
col2 varchar(50),
col3 bit,
col4 int
)
go
insert into tbl_SO_19
values
(1,'John',0,null),
(2,'Hony',0,null),
(3,'John',1,null),
(4,'Rohn',0,null),
(5,'Hony',1,null)

现在您可以使用以下查询来更新它,如您所愿:

Update tbl_SO_19
set col4 = t.col1
from tbl_SO_19 join tbl_SO_19 t on t.col2=tbl_SO_19.col2 and t.col3=1
where tbl_SO_19.col3 = 0