2016-05-26 9 views
2
ROW - NAME - BRAND 
____________________ 
1 - John - Ford 
2 - John - BMW 
3 - John - Merc 
4 - Mary - Ford 
5 - Mary - VW 
6 - James - Ford 
7 - James - Jeep 
8 - James - Lexus 
9 - Susan - Jeep 
10 - Susan - Lexus 

hat Wie kann ich die Werte in Spalte A finden, die nicht einen bestimmten Wert in Spalte BSuche Anzahl der Wert A, der nicht Wert B

Spalte A, lassen Sie uns Namen, sagen hat, ist nicht einzigartig, es gibt mehrere Zeilen mit dem gleichen Wert in A

Spalte B, sagen wir Car Brand, zeigt die Marke des Autos, das die Person in A hat. Es gibt nur eine insgesamt 5 Marken möglich und idealerweise sollte jeder eine der Marken haben - Ford.

Wie finde ich alle eindeutigen Namen für Leute, die andere Autotypen haben, aber den Ford vermissen? Im obigen Beispiel suche ich nach Susan.

Antwort

2

können Sie Aggregation verwenden:

select name 
from t 
group by name 
having sum(brand = 'Ford') = 0; 

Die having Klausel zählt die Anzahl der Zeilen, die Ford entsprechen. Die = 0 sagt, dass es keine solchen Zeilen gibt.

+1

Sie immer lehren Mir etwas!!! toll –

2

Ich hoffe, Sie sprechen darüber.

SELECT DISTINCT name 
FROM tablename 
WHERE brand <> 'FORD'; 
1

Wenn Sie Namen mit allen 4 anderen Autos müssen aber ohne Ford:

SELECT DISTINCT name FROM t 
WHERE (SELECT COUNT(DISTINCT car) FROM t AS t2 WHERE t2.name=t.name)=4 
AND (SELECT COUNT(*) FROM t AS t2 WHERE t2.name=t.name AND t2.car="Ford")=0 
+0

Nun, klar nicht: "Im obigen Beispiel suche ich Susan." – Blorgbeard

+0

Was bedeutet "alles außer einem"? –

+0

Guter Punkt - Frage ist widersprüchlich. – Blorgbeard

0

viele Möglichkeiten gibt es nur eine Antwort wäre:

SELECT DISTINCT A 
FROM T 
WHERE A NOT IN (
    SELECT A 
    FROM T 
    WHERE B = 'Ford' 
); 
Verwandte Themen