繁体   English   中英

如何使用来自同一表中另一特定行的列值更新sql表中每一行的列

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

我已经决定,每一行都需要具有相同的CWHERE 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM