2017-05-22 6 views
0

Ich bin ein wenig Neuling in SQL und habe mit einer scheinbar einfachen Aufgabe zu kämpfen. Lassen Sie uns die Daten sehen:Aggregieren Sie eine Tabelle zweimal auf verschiedenen Ebenen

FirstName LastName  ID   DepartmentNumber ManagerID 
Aliana Abramova  1111111111 4     4610226861 
Boriana Borova  2222222222 4     4610226861 
Cali  Moldovanska 3333333333 4     4610226861 
Anelia Simeonova 4009016246 1     4009016246 
Maria  Tacheva  4206174562 3     4206174562 

Dies ist eine Mitarbeitertabelle. Was ich versuche, ist, diese Angestellten zu extrahieren, die Manager sind (ID = ManagerID), aber nur diese, die in einer Abteilung arbeiten, die mehr als einen Mitarbeiter hat (also nur diese, die eine Anzahl von ID nach Abteilungsnummer gruppiert haben) 0)

ich kann diese Aufgaben tun getrennt:

Select FirstName, LastName, ID 
from Employee 
where ID = ManagerID; 

Select count(ID) 
from Employee 
group by DepartmentNumber; 

Es ist schwer für mich, aber irgendwie dieses wissen in eine Abfrage zusammenführen und die Daten kombiniert, so dass ich weiß, was diese IDs, die gehören zu Mitarbeiter, die sowohl Manager als auch in ihrer Abteilung sind, arbeiten mehr als 1 Person.

Ich habe ähnliche Aufgaben erledigt, aber wenn es darum geht, 1-2-3 Tabellen zu gruppieren, die auf verschiedenen Ebenen gruppiert sind (und durch verschiedene Schlüssel zusammengeführt werden), bekomme ich irgendwie verwirrt. Wahrscheinlich muss ich eine Zwischenauswahl treffen, aber jetzt sicher wie.

Antwort

1

können Sie verwenden EXISTS:

SELECT * 
FROM dbo.YourTable A 
WHERE EXISTS(SELECT 1 FROM dbo.YourTable 
      WHERE DepartmentNumber = A.DepartmentNumber 
      GROUP BY DepartmentNumber 
      HAVING COUNT(*) > 1) 
AND ID = ManagerID; 
+0

Hey, toll - ich glaube, es funktioniert! Sehr geschätzt. Wie interpretierst du Select 1 (für was steht 1) in der exists-Anweisung? – Bullzeye

+0

Ich glaube, das ist nur die erste Spalte aus der Ergebnismenge – Vnge

+1

@Bullzeye Wählen Sie nicht die erste Spalte, nur den Literalwert '1'. Es hätte 'SELECT *', 'SELECT irgendeine Spalte',' SELECT NULL' usw. sein können. Es wird nur die Existenz der Zeile überprüft, und ich benutze 'SELECT 1', um explizit anzuzeigen, dass ich keine Spalten von dieser Unterabfrage benötige – Lamak

Verwandte Themen