仍在使用表和查询,但需要一些 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/