2017-05-21 3 views
-1

Was wird die SQL-Abfrage in SQL Server für die markierte Abfrage auf Bild unten sein?SQL-Abfrage auf Supervisor-Tabelle

Finden Sie alle Supervisoren (direkt und indirekt) von Bob enter image description here

+0

Die Informationen in Ihrer Frage gegeben ist nicht genug, um geben Sie eine Antwort, da es keine der Beziehungen zwischen den beiden ta beschreibt oder auch wenn es sich um Tabellen oder nur um Spalten derselben Tabelle handelt. –

+0

Tun Sie es in einer rekursiven cte, im Wesentlichen Sie Union 2 Abfragen wo Supervisor = Person und Sie beziehen sich auf die Cte ​​in der zweiten – Mihai

+0

Es ist die einzige Tabelle mit zwei Spalten. @LudvigRydahl –

Antwort

0
;WITH CTE AS (
SELECT Supervisor 
FROM t 
WHERE Person='Bob' 
UNION ALL 
SELECT tt.Supervisor 
FROM t tt 
INNER JOIN CTE ON CTE.Supervisor = tt.Person 
) 
SELECT * 
FROM CTE 

Test

+0

Ich habe zwei Fehler auf diesem: 1) ungültige Spalte Name Person und 2) Mehrdeutige Spalte Name Supervisor. –

0
diese

Versuchen:

DECLARE @T TABLE (Person NVARCHAR(30) , Supervisor NVARCHAR(30)); 
INSERT INTO @T VALUES 
('Bob','Alice'),('Mary','Susan'),('Alice','David'),('David','Mary'); 

select T.Supervisor 
from @T T 
Where T.Person = 'Bob' 
union all 
Select TT.Supervisor 
From @T TT inner join @T A 
on A.Supervisor = TT.Person 
+0

Diese Abfrage würde für keine andere Person als Bob funktionieren. All dies setzt voraus, dass Bob kein Vorgesetzter von irgendjemand anderem ist und listet dann alle Vorgesetzten auf. Ist das der beste Ansatz? Kann keine allgemeinere Lösung gefunden werden? – Krash

Verwandte Themen