按记录分组,如果条件匹配,则按该特定组分组,然后设置最终结果,如下所示
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.
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.