2016-05-24 3 views
0

ASQL Zählung Auftreten von Wert durch eindeutige ID

folgende Tabelle
FlightID| Roles 
1  | Pilot 
1  | Steward 
1  | Steward 
2  | Pilot 
2  | Co-Pilot 

Wie kann ich die Anzahl der Stewards auf jedem einzelnen Flug bestimmen? Die Ausgabe sollte so aussehen:

FlightID| Count 
1  | 2 
2  | 0 

Zuerst habe ich versucht:

select FlightID, count(Role) from A group by FlightID 

aber das gibt mir die Gesamtzahl der Rollen pro Flug. Dann habe ich versucht:

select FlightID, count(Role) from A where Role="Steward" group by FlightID 

dies teilweise richtig ist, da es mir die Anzahl der Stewards pro Flug gibt, aber es funktioniert nicht berücksichtigt 0 Stewards. Wie kann ich auch 0 Stewards in das Ergebnis aufnehmen?

Antwort

2

Hat Ihr Tisch wirklich keinen Primärschlüssel? Ist dies der Fall, dann ist dies eine ziemlich einfache LEFT JOIN:

SELECT a1.FlightId, COUNT(a2.FlightId) 
FROM A a1 LEFT JOIN A a2 ON a1.id = a2.id 
AND a2.Roles = 'Steward' 
GROUP BY a1.FlightId; 

http://ideone.com/BySBSx

+0

Danke, LINKS JOIN war der Schlüssel. –

3

Sie können bedingte Aggregation verwenden.

+0

Danke. Siehst du einen Weg ohne "Fall wenn .. dann .. sonst .. Ende" zu verwenden? –