2016-11-03 3 views
1

Я новичок, поэтому может быть простым SQL-запросом для вас, ребята.Возвращаемые данные, имеющие значение 0

В таблице у меня есть записи, содержащие PFAULT0 и 1 против одного SRID. Я хочу получить только те записи, которые имеют 0 как PFault. Если какая-либо запись имеет PFault1, то мне не нужна эта запись.

E.g. запись может иметь оба значения, то есть 0 и 1, но мне нужны только те записи, которые не имеют 1. полевой тип bit.

образец таблицы данных

ID | SRID | PFault 
---- | ---- | ---- 
2255 | 1212 | 0 
2256 | 1212 | 0 
2257 | 1212 | 1 
2258 | 1213 | 0 
2259 | 1213 | 1 
2260 | 1214 | 0 
2261 | 1214 | 0 
2262 | 1216 | 0 

как указано выше мне нужно данные для

SRID 1214 and 1216 

ответ

1

Вы почти сформулировал это на английском языке уже в способ, который можно легко перевести на SQL. Это очень хорошее начало. Это просто перевод, то выглядит следующим образом:

select srid from table 
except 
select srid from table where pfault = 1; 
+0

спасибо hvd, что сработало для меня. – BlueMoon1

+0

SQL, The Original Fluent API :) (и я говорю, что только наполовину шутя - во многих случаях это очень верно: если вы можете записать его на английском языке, есть довольно близкий перевод в SQL) – jleach

3

Я предполагаю, что вы имеете в виду на НИПИ. Если это все, что вам нужно:

select srid 
from t 
group by srid 
having max(Pfault) = 0; 

Вы также можете написать это как:

have max(cast(Pfault as int)) = 0 

Если вы хотите оригинальные строки:

select t.* 
from t 
where not exists (select 1 from t t2 where t2.srid = t.srid and t2.Pfault = 1); 
+0

спасибо за ответ, да мне нужны SRID, но я не могу использовать функцию MAX, поскольку тип поля «бит» для pfault. – BlueMoon1

0
SELECT SRID 

ОТ #table отр ГДЕ PFault = 0 AND NOT EXISTS (SELECT 1 FROM #table МНО WHERE inr.pfault = 1 И inr.SRID = Otr.SRID) GROUP BY SRID