我正在处理查询和表,并且有一个看起来像这样的表。
Name | Job | Status
===============================
Test1 | Completed | Pending
Test1 | 50% | Pending
Test2 | Completed | Pending
Test2 | Completed | Pending
Test2 | Completed | Pending
我可以使用一个查询来查看名称和作业列,并且如果所有匹配名称的作业列都为“完成”,则将状态列更新为“已完成”吗?
为澄清起见,在上面的示例中,所有“ Test2”作业都被标记为已完成,因此我希望状态也表示已完成-但前提是所有Test2作业均已完成。
答案 0 :(得分:4)
这是SQL Server的一种可能的解决方案:
method
答案 1 :(得分:1)
另一个选择;
UPDATE Table1 SET Status = 'Completed' WHERE Name IN (
SELECT Name
FROM Table1
GROUP BY Name
HAVING COUNT(*) = SUM(CASE WHEN Job='Completed' THEN 1 ELSE 0 END)
)
内部选择查找所有Job值均设置为Completed的名称,而更新仅更新具有找到的名称的行的状态。
答案 2 :(得分:0)
尝试一下
UPDATE Table_Name SET Status = 'Completed' WHERE Name = 'Completed' AND Job = 'Completed'
答案 3 :(得分:0)
请尝试。
UPDATE yourTable
SET Status = 'Completed'
WHERE
Job = 'Completed' AND
Name not in (select Name from yourTable where Job<>'Completed')
答案 4 :(得分:0)
您可以尝试以下
create table #temp (Name varchar(20), Job varchar(20), sStatus varchar(20))
insert into #temp values
('Test1' , 'Completed' , 'Pending'),
('Test1' , '50%' , 'Pending'),
('Test2' , 'Completed' , 'Pending'),
('Test2' , 'Completed' , 'Pending'),
('Test2' , 'Completed' , 'Pending')
update #temp set sStatus = 'Completed'
where Name not in (
select a.Name from #temp a
where a.Job <> 'Completed'
)
select * from #temp