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

  • CHISTOSITOJAJA

    CHISTOSITOJA

    27 HAZİRAN 2010
  • Santozz Yazz

    Santozz Yazz

    23 Mart 2014
  • Showtime

    Showtime

    21 HAZİRAN 2006