declare @table table
(
id int,
status varchar(50)
)
insert into @table
values(1,'Open'),(1,'Open'),(1,'Open'),
(2,'Open'),(2,'Pending'),(2,'Open'),
(3,'Open'),(3,'Completed'),(3,'Pending'),
(4,'Pending'),(4,'Pending'),(4,'Pending'),
(5,'Completed'),(5,'Completed'),(5,'Completed')
I want to group by the records and that particular group if the condition matched then set final result like below
--expected output --Id Status --1 Open --2 Pending --3 Pending --4 Pending --5 Completed
For each group, I want to check the following condition
--Open --Open => Open --Open --Open --Pending => Pending --Open --Open --Completed => Pending --Open --Pending --Pending =>Pending --Pending --Completed --Completed =>Completed --Completed
Advertisement
Answer
You can use conditional logic:
select id,
(case when max(status) = min(status) then max(status)
else 'Pending'
end) as status
from @table t
group by id;
Here is a db<>fiddle.