Получить записи, в которых все соответствующие столбцы одного и того же столбца равны нулю

#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 лучше понять и обеспечить большую пользу будущим посетителям сайта. Спасибо!