2011-03-03 17 views
5

Şu anda, özyinelemeli örneklerin gösterdiği işe benzer bir çalışan çizelgesinden bir çalışan hiyerarşisi oluşturmak için bir CTE sorgusu yürütüyorum. Sıkıştığım yer ise, tek bir çalışan için sorgulamaya çalışıyorum ve üstündeki hiyerarşiyi alıyorum. Ben şaşırıpSQL CTE Özyineleme: Ana Kayıtları Geri Alma

with employeeMaster as (
    select p.EmployeeID, p.MgrID, p.Name 
    from Employees p 
    where p.MgrID is null 

    union all 

    select c.EmployeeID, c.MgrID, c.Name 
    from employeeMaster cte inner join Employees c on c.MgrID = cte.EmployeeID 
) 
select * from employeeMaster 

geçerli:

Employees 
=========================================================================== 
EmployeeID MgrID Name 
1    null  Joe 
2    1  John 
3    2  Rob 
4    2  Eric 

aşağıdaki beni yukarıdan aşağıya hiyerarşi görüntülemesini sağlayan SQL geçerli: ile Aşağıda işe çalışıyorum tablonun bir örnektir En düşük seviye çalışanı olan Rob veya Eric'i nasıl sorgulayacağımı ve onun üzerindeki hiyerarşiyi Joe> John> Eric'den nasıl döndürebileceğimi anlayamıyorum. Öyle görünüyor ki bu kolay olmalı ama benim için hayatımı göremiyorum.

cevap

8

Hiyerarşinin derinliğine bağlı olarak değişken sayıda sütun döndürmek için bir sorgu mu arıyorsunuz? Veya sadece bir alanda birleştirilmiş bir dize?

Sorunuzda Eric'i ve hiyerarşideki herhangi birisini alacak küçük bir değişiklik var.

WITH employeeMaster 
     AS (SELECT p.EmployeeID , 
        p.MgrID , 
        p.NAME 
      FROM  Employees p 
      WHERE p.NAME = 'Eric' 
      UNION ALL 
      SELECT c.EmployeeID , 
        c.MgrID , 
        c.NAME 
      FROM  employeeMaster cte 
        INNER JOIN Employees c ON c.EmployeeID = cte.MgrID 
     ) 
SELECT * 
FROM employeeMaster m 
+0

Tablo örneğimde, Eric'i sorgulamak ve kayıtlarını ve üstündeki iki kişiyi gösteren üç kayıt içeren bir kayıt kümesi döndürmek istiyorum. Son hedef, herhangi bir çalışanın bir yetenek sorgusu olmasını ve çalışanın en iyi şekilde komut zincirini görmesini sağlamaktır. – Tehrab

+0

Size Eric ve yöneticilerini vermek için düzenledim. –

+0

Her zaman basit şeyler. Cevaplandı olarak işaretlendi. – Tehrab