Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Hirarki Pohon SQL Server dan Kumpulan Bersarang dengan id Rekaman Duplikat

Inilah salah satu yang berhasil untuk saya:

@ParentID hanyalah titik awal dalam hierarki, tetapi Anda dapat memasukkan 0 (tapi saya pikir Anda menggunakan null sebagai ID dasar, jadi Anda akan mendapatkan idenya)

Kunci untuk pengurutan berurutan adalah dengan kunci pengurutan yang telah dibuat.

WITH RoleHierarchy (RoleID, [Role], [Description], ParentID, Editable, HierarchyLevel, SortKey) AS
(
   -- Base
   SELECT
        RoleID,
        [Role],
        [Description],
        ParentID,
        Editable,
        0 as HierarchyLevel,
        CAST(RoleID AS VARBINARY(300))
   FROM
        dbo.Roles       
   WHERE
        RoleID = @ParentID

   UNION ALL

   -- Recursive
   SELECT
        e.RoleID,
        e.[Role],
        e.[Description],
        e.ParentID,
        e.Editable,
        th.HierarchyLevel + 1 AS HierarchyLevel,
        CAST (th.SortKey + CAST (e.[Role] AS VARBINARY(100)) + CAST (e.[RoleID] AS VARBINARY(100)) AS VARBINARY(300))
   FROM
        Roles e
        INNER JOIN RoleHierarchy th ON e.ParentID = th.RoleID
    WHERE
        e.RoleID != 0
)

SELECT
    RoleID,
    ParentID,
    [Role],
    [Description],
    Editable,
    HierarchyLevel
FROM
    RoleHierarchy
WHERE
    RoleID != @ParentID
ORDER BY
    SortKey


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Gunakan CRYPT_GEN_RANDOM() untuk Membuat Kriptografi, Angka Acak di SQL Server

  2. Kueri SQL untuk menjumlahkan data

  3. Ekspor tabel dari database ke file csv

  4. SQL RANK() versus ROW_NUMBER()

  5. Bagaimana cara mendapatkan nomor berikutnya yang tersedia dari SQL Server? (Bukan kolom Identitas)