2016-08-03 18 views
0

Dies könnte eine einfache sein, aber ich bin nicht zu vertraut mit SQL Server und erweiterte Verwendungen. Grundsätzlich kann ich dazu keine Abfrage erstellen.SQL Server - Werte basierend auf ID erhalten, wo eine andere Spalte nicht alle Werte hat

Ich habe eine Tabelle, die wie folgt aussieht. Jede ID hat einen Typ, der nur 3 Werte (0,1,2) hat.

ID  Type 
40271 0 
40271 1 
40271 2 
40281 0 
40281 1 

Ich möchte nur die IDs auswählen, die nicht alle Typen haben.

Ausgang (Seit seinem fehlen den dritten Typ dh 2):

ID  Type 
    40281 0 
    40281 1 

Ich brauche alle Zeilen aus der Tabelle auszuwählen, in dem für jede ID, alle Arten (0,1,2) nicht existieren .

Ich probierte die Gruppe aus, hatte Klauseln, aber konnte nicht ganz dort erreichen.

versuchte ich das, aber es gibt mir sowohl die dieses

select ID 
    from Table 
    group by ID 
    having count(distinct Type) > 1 
+2

Sie wollen 'Zählung (distinct type) <3 'haben und Sie sollten wahrscheinlich, dass als in/exists-Anweisung. z.B. 'select id, tippe aus mytable t wo existiert (wähle 1 aus mytable wobei id = t.id group nach id mit count (distinct type) <3)' – ZLK

+0

@ZLK Das wars. Benötigt nur 'haben zählen (distinct type) <3'. Ich wusste, dass ich in der Nähe bin, konnte einfach nicht richtig denken. Danke mein Herr! Fügen Sie es als Antwort hinzu und ich werde es akzeptieren. – TheUknown

Antwort

2

Eine Möglichkeit, es zu tun EXISTS verwendet um zu überprüfen, ob die ID weniger als drei Typen hat.

SELECT ID, Type 
FROM Table T 
WHERE EXISTS (
    SELECT 1 
    FROM Table 
    WHERE ID = T.ID 
    GROUP BY ID 
    HAVING COUNT(DISTINCT Type) < 3); 
-1

Versuchen IDs

select t.* from test1 t, 
    (select id, count(*) cnt from test1 group by id) t1 
where t.id = t1.id 
    and t1.cnt < 3 
+0

Join in einer 'Where'-Anweisung ist veraltet. Bitte verwenden Sie 'innere Verbindung'. https://msdn.microsoft.com/en-us/library/dd172122(v=vs.100).aspx –