2016-11-03 9 views
1

Ich bin ein Neuling so kann eine einfache SQL-Abfrage für Sie sein.Zurückgeben von Daten mit Wert 0

In einer Tabelle habe ich Datensätze mit PFAULT0 und 1 gegen eine SRID. Ich möchte nur die Datensätze erhalten, die 0 als PFault haben. Wenn irgendein Datensatz PFault1 hat, brauche ich diesen Datensatz nicht.

z. ein Datensatz kann beide Werte haben, d. h. 0 und 1, aber ich brauche nur die Datensätze, die nicht 1 haben. Feldtyp ist bit.

Probentabellendaten

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 

nach oben Ich muss die Daten für

SRID 1214 and 1216 

Antwort

1

Sie formuliert es fast auf Englisch bereits in Ein Weg, der ganz einfach zu SQL übersetzt werden kann. Das ist ein sehr guter Anfang. Die einfache Übersetzung sieht dann aus wie:

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

danke hvd, das hat bei mir funktioniert. – BlueMoon1

+0

SQL, Die Original Fließende API :) (und ich sage das nur halb scherzhaft - in vielen Fällen ist es sehr wahr: Wenn Sie es auf Englisch buchstabieren können, gibt es eine ziemlich enge Übersetzung zu SQL) – jleach

3

Ich nehme an, Sie auf die SRIDs beziehen. Wenn das alles ist, was Sie brauchen:

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

Sie können dies auch schreiben als:

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

Wenn Sie die ursprünglichen Reihen wollen:

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

Danke für die Antwort, ja ich brauche SRIDs, aber ich kann nicht MAX-Funktion als Feldtyp ist 'Bit' für pfault. – BlueMoon1

0
SELECT SRID 

VON #table Otr WHERE PFault = 0 AND NOT EXISTS (1 FROM #table inr SELECT WHERE inr.pfault = 1 UND inr.SRID = Otr.SRID) GROUP BY SRID

Verwandte Themen