#sql #sql-server #tsql #sql-server-2012
Вопрос:
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
Комментарии:
1. Пожалуйста, объясните логику. Не очевидно, что у вас есть все условия.
2. Предполагается, что вы используете только 1 версию SQL Server, поэтому, пожалуйста, исправьте свои теги. И форматирование цитат предназначено для того, чтобы вы действительно цитировали что-то, а не только для акцента.
Ответ №1:
Вы можете использовать условную логику:
select id,
(case when max(status) = min(status) then max(status)
else 'Pending'
end) as status
from @table t
group by id;
Вот скрипка db<>.
Комментарии:
1. Спасибо, @Gordon Linoff Я пытался, но не мог понять, как это можно сделать
2. по крайней мере, с вашим решением у меня есть представление о том, как его можно достичь