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

sql सर्वर:उन पंक्तियों का चयन करें जिनका योग किसी मान से मेल खाता है

इसे हल करने के लिए आप MSSQL में पुनरावर्ती क्वेरी का उपयोग कर सकते हैं।

SQLFiddle डेमो

पहली पुनरावर्ती क्वेरी संचयी योग <=150 के साथ वस्तुओं का एक पेड़ बनाती है। दूसरी पुनरावर्ती क्वेरी संचयी योग =150 के साथ लीफ लेती है और ऐसे सभी पथों को इसकी जड़ों तक आउटपुट करती है। साथ ही ItemsCount . द्वारा क्रमित अंतिम परिणामों में इसलिए आपको पहले पसंदीदा समूह मिलेंगे (कम से कम आइटम गिनती के साथ)।

WITH CTE as
( SELECT id,num,
         id as Grp,
         0 as parent,
         num as CSum,
         1 as cnt,
         CAST(id as Varchar(MAX)) as path
     from T where num<=150
  UNION all
  SELECT t.id,t.num,
         CTE.Grp as Grp, 
         CTE.id as parent,
         T.num+CTE.CSum as CSum,
         CTE.cnt+1 as cnt,
         CTE.path+','+CAST(t.id as Varchar(MAX)) as path
    from T 
  JOIN CTE on T.num+CTE.CSum<=150 
             and CTE.id<T.id 
),
BACK_CTE as
(select CTE.id,CTE.num,CTE.grp, 
         CTE.path ,CTE.cnt as cnt,
         CTE.parent,CSum 
    from CTE where CTE.CSum=150
  union all
  select CTE.id,CTE.num,CTE.grp,
         BACK_CTE.path,BACK_CTE.cnt, 
         CTE.parent,CTE.CSum 
   from CTE
   JOIN BACK_CTE on CTE.id=BACK_CTE.parent 
              and CTE.Grp=BACK_CTE.Grp
              and BACK_CTE.CSum-BACK_CTE.num=CTE.CSum
) 
select id,NUM,path, cnt as ItemsCount   from BACK_CTE order by cnt,path,Id


  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 का उपयोग करके एक स्ट्रिंग के भीतर शब्दों की संख्या खोजें

  2. मैं एक्सप्रेस 4 वेब एप्लिकेशन में कई मार्गों पर एक एकल एमएसएसक्यूएल कनेक्शन पूल का उपयोग कैसे कर सकता हूं?

  3. अंतिम सम्मिलित पंक्ति आईडी प्राप्त करें (SQL कथन के साथ)

  4. एन्क्रिप्टेड कनेक्शन SQL सर्वर के लिए प्रमाणपत्र परिनियोजित करना

  5. SQL में एकाधिक कॉलम अपडेट करें