Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

sql सर्वर में सभी चाइल्ड रिकॉर्ड वाले रिकॉर्ड प्राप्त करें

आपको एक पुनरावर्ती सामान्य तालिका अभिव्यक्ति का उपयोग करने की आवश्यकता है, फिर परिणामों को प्रत्येक रिकॉर्ड के लिए केवल आधार पथ के लिए फ़िल्टर करें, (यानी आईडी 1131 के लिए ABC/RST/UVW प्राप्त करें और न सिर्फ 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;

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. एसक्यूएल - एक कॉलम को पंक्ति में स्थानांतरित करें

  2. सभी तालिकाओं, संग्रहीत प्रक्रियाओं, ट्रिगर्स, बाधाओं और सभी निर्भरताओं को एक sql कथन में छोड़ दें

  3. क्षतिग्रस्त एसक्यूएल बैकअप की मरम्मत के लिए एसक्यूएल बैकअप रिकवरी टूल - उत्पाद समीक्षा - डैनियल जोन्स द्वारा एक अतिथि पोस्ट

  4. एंटिटी फ्रेमवर्क कोड-फर्स्ट इनिशियलाइज़र में डेटाबेस संयोजन सेट करें

  5. SQL सर्वर अपडेट ट्रिगर, केवल संशोधित फ़ील्ड प्राप्त करें