SQL Server — Проблема с подключением

#sql #sql-server #tsql

Вопрос:

У меня есть таблица со следующими строками :

Раздел ИД РазделыСтатус
1 Назначенный
1 Одобренный
2 Назначенный
2 Назначенный
3 Назначенный

Теперь я хочу получить идентификатор раздела, в котором все статусы разделов принадлежат этому идентификатору раздела и не утверждены.

Результат, ожидаемый для приведенной выше таблицы : 1,2,3

Еще Один Пример :

Раздел ИД РазделыСтатус
1 Одобренный
1 Одобренный
2 Назначенный
2 Назначенный
3 Назначенный

Результат, ожидаемый для приведенной выше таблицы : 2,3

Комментарии:

1. В соответствии с руководством по вопросам, пожалуйста, покажите, что вы пробовали, и расскажите нам, что вы нашли (на этом сайте или в другом месте) и почему это не соответствует вашим потребностям.

2. Я отмечаю, что вы не приняли ответ ни на один из ваших вопросов — по какой причине?

Ответ №1:

Это похоже на агрегацию с условным количеством в HAVING предложении.

 SELECT t.SectionId
FROM yourtable t
GROUP BY t.SectionId
HAVING COUNT(CASE WHEN t.SectionStatus = 'Approved' THEN 1 END) = 0;
 

db<>скрипка

Ответ №2:

Один из способов получить это-перекрестно применить запись и проверить, «Одобрена» она или нет.

Попробуйте выполнить следующие действия:

 select distinct SectionId from yourtable tab
cross apply (select 'Approved' Stat)t 
where t.Stat <> tab.SectionStatus
 

Пожалуйста, ознакомьтесь с db<>fiddle <>здесь.