[英]How to update a column of every row in a sql table with the value of that column from another specific row in the same table
所以我有一个叫做哑表,看起来像
A | B | C | D | E
------------------
1 | 2 | 3 | 4 | u1
1 | 2 | 4 | 3 | u2
1 | 2 | 4 | 3 | u3
我已经决定,每一行都需要具有相同的C
列WHERE E = u1
。 所以我最终会得到:
A | B | C | D | E
------------------
1 | 2 | 3 | 4 | u1
1 | 2 | 3 | 3 | u2
1 | 2 | 3 | 3 | u3
为此,我运行了以下查询:
update tb1
set tb1.C = tb2.C
from dummy as tb1, dummy as tb2
where tb2.E = 'u1'
我只是好奇这是否是在SQL Server中执行类似操作的最佳方法。
尝试这个
update dummy set C = (SELECT TOP 1 C FROM dummy WHERE E = 'u1')
测试数据
DECLARE @TABLE TABLE (A INT,B INT,C INT,D INT,E VARCHAR(2))
INSERT INTO @TABLE VALUES
(1,2,3,4,'u1'),(1,2,4,3,'u2'),(1,2,4,3,'u3')
更新查询
UPDATE @TABLE
SET C = (SELECT TOP 1 C
FROM @TABLE
WHERE E = 'u1')
结果集
SELECT * FROM @TABLE
╔═══╦═══╦═══╦═══╦════╗
║ A ║ B ║ C ║ D ║ E ║
╠═══╬═══╬═══╬═══╬════╣
║ 1 ║ 2 ║ 3 ║ 4 ║ u1 ║
║ 1 ║ 2 ║ 3 ║ 3 ║ u2 ║
║ 1 ║ 2 ║ 3 ║ 3 ║ u3 ║
╚═══╩═══╩═══╩═══╩════╝
;WITH x as
(
SELECT e,c, MAX(CASE WHEN E = 'u1' THEN c END) OVER () newc
FROM tb1
)
UPDATE x
SET c = newc
WHERE e <> 'u1'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.