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

डेटाबेस में प्रदर्शित ट्री संरचना को क्लोन करने के लिए SQL का उपयोग करें

Quassnoi की एक क्वेरी के आधार पर इसे आज़माएं। का लेख Adjacency List vs Nested Sets :SQL सर्वर :

WITH q AS
(
    SELECT  h.*, 1 AS level
    FROM    Table1 h
    WHERE   id = 3
    UNION ALL
    SELECT  hp.*, level + 1
    FROM    q
    JOIN    Table1 hp
    ON      hp.id = q.ParentGroupID
), q2 AS (
    SELECT
        ID,
        ParentGroupID,
        SomeValue,
        (SELECT MAX(level) FROM q) - level AS level
    FROM q
)
INSERT INTO table1
SELECT
    (SELECT MAX(ID) FROM Table1) + level + 1 AS ID,
    CASE WHEN level = 0 THEN -1
         ELSE (SELECT MAX(ID) FROM Table1) + level
    END AS ParentGroupID,
    SomeValue + '-cloned'
FROM    q2

आपके परीक्षण डेटा पर चलने पर परिणाम:

ID  ParentGroupID  SomeValue  
1   -1             a          
2   1              b          
3   2              c          
4   -1             a-cloned
5   4              b-cloned
6   5              c-cloned


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. My Select SUM क्वेरी शून्य लौटाती है। इसे 0 . वापस करना चाहिए

  2. SQL सर्वर प्रबंधन स्टूडियो (SSMS) में अलग टैब में क्वेरी और परिणाम कैसे प्रदर्शित करें - SQL सर्वर / TSQL ट्यूटोरियल भाग 15

  3. विशिष्ट मान के बराबर विशिष्ट कॉलम के योग द्वारा समूह पंक्ति

  4. पुनर्प्राप्ति बनाम कोई पुनर्प्राप्ति विकल्प के साथ SQL सर्वर पुनर्स्थापना डेटाबेस का अन्वेषण करें

  5. समान दायरे (एसक्यूएल सर्वर) में अंतिम-सम्मिलित पहचान मान वापस करने के लिए SCOPE_IDENTITY() का उपयोग करें