2016-08-09 35 views
-2

Also in diesem Fall möchte ich jede ID anzeigen, wo der entsprechende Wert 1 ist. In dem Fall jedoch, wo die ID 4 ist, will ich es nicht zeige die 4 an, wo der Wert 1 ist, ich möchte nur 4 nicht anzeigen. Wenn ich eine WHERE value LIKE '1' mache, zeigt es mir die zwei IDs von 4, wo der Wert 1 ist. Gibt es eine Möglichkeit, 4 überhaupt nicht zu zeigen? Danke im Voraus.SQL: Zeigen Sie nichts an, bis alle Werte übereinstimmen

ID:.......1...2...3...4...4...4...5 
Value:....1...1...1...1...2...1...1 

(Dies ist auf Microsoft SQL Server Management Studio by the way)

+0

ich Ihre Frage nicht bin zu verstehen, können Sie bitte näher erläutern? – sgeddes

+0

Willst du keine Datensätze, wo 'ID' 4 ist, oder du willst nur Datensätze, deren 'ID' auch 1 ist –

Antwort

1

Wenn Sie nur die IDs wollen, dann Aggregation verwenden:

select id 
from t 
group by id 
having min(value) = 1 and max(value) = 1; 
+2

Dumm, aber aus dieser Antwort glaube ich tatsächlich, dass ich verstanden habe, was OP gefragt hatte, weil Frage nicht klar ist. – sbrbot

0

auf Gordon Antwort hinzuzufügen

Ich würde eine Zählung hinzufügen, da es scheint, dass Ihre Daten mehrere 1s in diesem Fall haben, wenn Sie zwei 1s haben, würden Sie es sowohl als Minimum als auch als Maximum

haben
select id 
from t 
group by id 
having min(value) = 1 and max(value) = 1 and count(value) = 1; 

könnten Sie auch

select id from t group by id having sum(value) = 1 and count(value) = 1; 
+0

Ich bin mir nicht sicher, ob das OP gemeint ist. Bei aller Fairness ist die Frage nicht klar und das vorgestellte Beispiel kann den Eindruck erwecken, dass er nur an IDs mit einem einzigen Wert interessiert ist. – sstan

0
with cte as (
    select * from (values 
     (1, 1), 
     (2, 1), 
     (3, 1), 
     (4, 1), 
     (4, 2), 
     (4, 1), 
     (5, 1) 
    ) as x(ID, Value) 
) 
select * 
from cte 
where ID not in (
    select ID 
    from cte 
    where Value > 1 
);