SORU
18 Kasım 2009, ÇARŞAMBA


Basit bir özyinelemeli-katıl kendi SQL Server yapmak için bir yol?

Bir özyinelemeli-katıl kendi SQL Server yapmanın en kolay yolu nedir? Böyle bir tablo var:

PersonID | Initials | ParentID
1          CJ         NULL
2          EB         1
3          MB         1
4          SW         2
5          YT         NULL
6          IS         5

Ve kayıtları bir hiyerarşi belirli bir kişi ile başlayan sadece ilgili elde edebilmek istiyorum. Eğer CJ hiyerarşi istedim Eğer PersonİD=1 olsun diye:

PersonID | Initials | ParentID
1          CJ         NULL
2          EB         1
3          MB         1
4          SW         2

Ve EB için almak istiyorum:

PersonID | Initials | ParentID
2          EB         1
4          SW         2

Biraz bu yolda kaldım o ayrı sabit derinlemesine bir yanıt katılıyor bir sürü göre nasıl yapılacağını düşünemiyorum. Bu pek çok düzeyde olmayacak, çünkü bu olur ama bunu doğru yapmak istiyorum gibi bir şey yapmaz.

Teşekkürler! Chris.

CEVAP
18 Kasım 2009, ÇARŞAMBA


WITH    q AS 
        (
        SELECT  *
        FROM    mytable
        WHERE   ParentID IS NULL -- this condition defines the ultimate ancestors in your chain, change it as appropriate
        UNION ALL
        SELECT  m.*
        FROM    mytable m
        JOIN    q
        ON      m.parentID = q.PersonID
        )
SELECT  *
FROM    q

Sipariş durumu ekleyerek, ağaç düzeni korumak

WITH    q AS 
        (
        SELECT  m.*, CAST(ROW_NUMBER() OVER (ORDER BY m.PersonId) AS VARCHAR(MAX)) COLLATE Latin1_General_BIN AS bc
        FROM    mytable m
        WHERE   ParentID IS NULL
        UNION ALL
        SELECT  m.*,  q.bc   '.'   CAST(ROW_NUMBER() OVER (PARTITION BY m.ParentID ORDER BY m.PersonID) AS VARCHAR(MAX)) COLLATE Latin1_General_BIN
        FROM    mytable m
        JOIN    q
        ON      m.parentID = q.PersonID
        )
SELECT  *
FROM    q
ORDER BY
        bc

ORDER BY bu durumu değiştirerek kardeşler sıralamasını değiştirebilirsiniz.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • KliptOut KwazeeKilla

    KliptOut Kwa

    24 ŞUBAT 2010
  • Matt Stokes

    Matt Stokes

    22 Ocak 2008
  • Pál Zoltán Illés

    Pál Zoltán

    30 NİSAN 2007