SQL Server 查询以更新具有相同名称的多行

标签 sql sql-server

仍在使用表和查询,但需要一些 SQL Server 查询帮助。

我有一张看起来像这样的 table 。

VMName   | DiskType   | Status      | Result
---------+------------+-------------+---------
TestVM1  |  OS        | Completed   | 
TestVM1  |  Data      | Completed   | 
TestVM2  |  OS        | Failed      | 
TestVM2  |  Data      | Completed   | 
TestVM2  |  Data      | Completed   | 

在结果栏中,我想说“已完成”如果 操作系统和数据盘的状态都为已完成。

但是,如果 OS 磁盘显示失败,则结果列应显示该 VM 的所有磁盘失败。

像这样。
VMName   | DiskType   | Status      | Result
---------+------------+-------------+---------
TestVM1  |  OS        | Completed   | Completed
TestVM1  |  Data      | Completed   | Completed
TestVM2  |  OS        | Failed      | Failed
TestVM2  |  Data      | Completed   | Failed
TestVM2  |  Data      | Completed   | Failed

我尝试拼凑一个查询,但不确定我做错了什么,因为它没有做任何事情。
UPDATE working_table t1
SET Result = 'Failed'
WHERE disktype = 'OS' AND 
      status = 'Failed' AND
      NOT EXISTS (SELECT 1 FROM working_table t2 WHERE t1.VMname = t2.VMname);

最佳答案

似乎它只需要一个 EXISTS

UPDATE t1
SET Result = 'Failed'
FROM working_table t1
WHERE EXISTS (
      SELECT 1 
      FROM working_table t2 
      WHERE t2.VMname = t1.VMname
        AND t2.disktype = 'OS' 
        AND t2.[Status] = 'Failed'
)
AND (Result IS NULL OR Result <> 'Failed'); -- optional criteria for only updating what is needed
或者,如果您想更新所有结果,而不仅仅是那些失败的:
UPDATE t1
SET Result = CASE
             WHEN EXISTS (SELECT 1 FROM working_table t2 WHERE t2.VMname = t1.VMname AND t2.disktype = 'OS' AND t2.[Status] = 'Failed') 
             THEN 'Failed' 
             ELSE t1.[Status] 
             END
FROM working_table t1;

关于SQL Server 查询以更新具有相同名称的多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54002804/

相关文章:

基于条件的 SQL 查询

SQL 优化案例 (MSSQL)

sql - NOT IN 子句中的 NULL 值

sql-server - SQL Server View 中是否支持 ORDER BY?

MS sql 服务器中的 mysql REGEXP

sql-server - SQL Server 延迟名称解析适用于函数吗?

php - Sql 请求到 2 个表以获取每行的百分比

mysql - Sql 选择带有特定 WHERE 的最后一条记录

sql-server - 如何避免 SQL 作业中出现 "Warning: String or Binary data would be truncated"导致失败

sql - 从 SQL 脚本在 H2 数据库中插入长文本