#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;
Ответ №2:
Один из способов получить это-перекрестно применить запись и проверить, «Одобрена» она или нет.
Попробуйте выполнить следующие действия:
select distinct SectionId from yourtable tab
cross apply (select 'Approved' Stat)t
where t.Stat <> tab.SectionStatus
Пожалуйста, ознакомьтесь с db<>fiddle <>здесь.