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

ट्री टेबल के लिए Sql क्वेरी

a_horse_with_no_name के उत्तर पर विस्तार करते हुए, यह दिखाता है कि SQL सर्वर के पुनरावर्ती CTE के कार्यान्वयन का उपयोग कैसे करें (पुनरावर्ती एकल-रिकॉर्ड क्रॉस लागू ) प्रश्न में सटीक आउटपुट देने के लिए row_number() के संयोजन में।

declare @t table(id int,parentId int,name varchar(20))
insert @t select 1,  0        ,'Category1'
insert @t select 2,  0,        'Category2'
insert @t select 3,  1,        'Category3'
insert @t select 4 , 2,        'Category4'
insert @t select 5 , 1,        'Category5'
insert @t select 6 , 2,        'Category6'
insert @t select 7 , 3,        'Category7'
;

WITH tree (id, parentid, level, name, rn) as 
(
   SELECT id, parentid, 0 as level, name,
       convert(varchar(max),right(row_number() over (order by id),10)) rn
   FROM @t
   WHERE parentid = 0

   UNION ALL

   SELECT c2.id, c2.parentid, tree.level + 1, c2.name,
       rn + '/' + convert(varchar(max),right(row_number() over (order by tree.id),10))
   FROM @t c2 
     INNER JOIN tree ON tree.id = c2.parentid
)
SELECT *
FROM tree
ORDER BY cast('/' + RN + '/' as hierarchyid)

ईमानदारी से कहूं तो, ट्री "पथ" बनाने के लिए स्वयं आईडी का उपयोग करना काम करेगा, क्योंकि हम सीधे आईडी द्वारा ऑर्डर कर रहे हैं, लेकिन मुझे लगा कि मैं row_number() फ़ंक्शन में फिसल जाऊंगा।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर में CSV फ़ाइल आयात करें

  2. एसक्यूएल क्वेरी दो तालिकाओं के बीच अंतर वापस करने के लिए

  3. SQL सर्वर पर VMware CPU हॉट प्लग vNUMA प्रभाव

  4. एक अजीब त्रुटि प्राप्त करना, SQL सर्वर क्वेरी `विथ` क्लॉज का उपयोग कर

  5. SQL सर्वर 2005 क्वेरी का प्रदर्शन