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

Dapatkan catatan yang berisi semua catatan anak di server sql

Anda perlu menggunakan ekspresi tabel umum rekursif, lalu memfilter hasilnya hanya untuk jalur dasar untuk setiap record, (yaitu untuk ID 1131 dapatkan ABC/RST/UVW dan bukan hanya ABC/RST

WITH CTE AS
(   SELECT  ID, 
            Name, 
            ParentID, 
            NextParentID = ParentID, 
            Path = CAST(Name AS VARCHAR(MAX)),
            Recursion = 1
    FROM    T
    UNION ALL
    SELECT  CTE.ID, 
            CTE.Name, 
            CTE.ParentID, 
            T.ParentID, 
            CAST(T.Name + '/' + CTE.Path AS VARCHAR(MAX)),
            Recursion + 1
    FROM    CTE
            INNER JOIN T
                ON CTE.NextParentID = T.ID
), CTE2 AS
(   SELECT  CTE.ID,
            CTE.Name,
            CTE.ParentID,
            CTE.Path,
            RowNumber = ROW_NUMBER() OVER(PARTITION BY CTE.ID ORDER BY Recursion DESC)
    FROM    CTE
)
SELECT  ID, Name, ParentID, Path
FROM    CTE2
WHERE   RowNumber = 1;

Contoh pada SQL Fiddle



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kembalikan Nama Server Lokal di SQL Server dengan @@SERVERNAME

  2. Pembagian bilangan bulat di sql server

  3. Kinerja SQL Server TOP IO Query -1

  4. Cari Tahu apakah Partisi Dikompresi di SQL Server (T-SQL)

  5. temukan lokasi terdekat di ms-sql