#sql #sql-server #sql-server-2012
#sql #sql-сервер #sql-server-2012
Вопрос:
Мои данные выглядят следующим образом
| id | Failure
---------------- -----------
| 1 | null
| 1 | null
| 1 | null
| 1 | abc
| 1 | null
| 2 | null
| 2 | null
| 2 | null
| 2 | abc
| 2 | null
| 3 | null
| 3 | null
| 3 | null
| 3 | null
| 3 | null
Теперь мне нужно получить идентификатор, когда все данные столбца сбоя имеют значение null для этого идентификатора.
Ожидаемый результат:
| id | Failure
---------------- ----------
| 3 | null
| 3 | null
| 3 | null
| 3 | null
| 3 | null
Ответ №1:
Если вам нужны только идентификаторы, используйте агрегацию:
select id
from t
group by id
having max(failure) is null;
Я не вижу причины получать все повторяющиеся строки. Если они вам нужны, то я предлагаю not exists
:
select t.*
from t
where not exists (select 1
from t t2
where t2.id = t.id and t2.failure is not null
);
Комментарии:
1. на самом деле мне нужно количество различных идентификаторов полей, запрос выше не выдает количество
2. @KalyanVarma . . . Ничто в этом вопросе не ссылается на количество. Если у вас есть другой вопрос, вы должны задать его как новый вопрос (если вы измените этот, вы можете сделать ответы недействительными).
Ответ №2:
Select *
from Table
where Id not in (select id from Table where failure is not null)
Комментарии:
1. Привет! Хотя это может быть ответом на вопрос (непроверенный), ответы только для кода в SO не рекомендуется. Пожалуйста, рассмотрите возможность добавления пояснения к вашему ответу, чтобы помочь OP лучше понять и обеспечить большую пользу будущим посетителям сайта. Спасибо!