按记录分组,如果条件匹配,则按该特定组分组,然后设置最终结果,如下所示

Group by the records and that particular group if condition matched then set final result like below

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')

如果条件匹配,我想按记录和特定组进行分组,然后设置如下所示的最终结果

--expected output
--Id    Status
--1     Open
--2     Pending
--3     Pending
--4     Pending
--5     Completed

对于每个组,我要检查以下条件

--Open
--Open => Open
--Open

--Open
--Pending => Pending
--Open

--Open
--Completed => Pending
--Open

--Pending
--Pending =>Pending
--Pending

--Completed
--Completed =>Completed
--Completed

您可以使用条件逻辑:

select id,
       (case when max(status) = min(status) then max(status)
             else 'Pending'
        end) as status 
from @table t
group by id;

Here 是一个 db<>fiddle.