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

सामग्री के बिल के लिए पुनरावर्ती क्वेरी

मुझे लगता है कि आपका तर्क मूल रूप से ठीक था। यहां दो सुधार हैं। सबसे पहले, स्तर वृद्धिशील है ताकि आप देख सकें कि रिकर्सन के साथ क्या होता है। दूसरा, यह एक स्पष्ट जुड़ाव का उपयोग करता है:

With BMStudy as (
      select bm.ppn_i, bm.cpn_i, bm.bomname_i, bm.QUANTITY_I, 1 as BOMLevel
      from BM010115 bm
      where bm.PPN_I like '0123105-HWT' and bm.BOMNAME_I like ''
      UNION ALL
      select bb.ppn_i, ba.cpn_i, bb.bomname_i, ba.quantity_i, (BOMLevel + 1) as BOMLevel
      from BMStudy ba join
           BM010115 bb
           on ba.cpn_i = bb.ppn_i
      where bb.BOMNAME_I like ''
     )
select * from BMStudy;

मुझे संदेह है कि आपकी समस्या where bb.BOMNAME_I like '' . क्या यह संभव है कि यह मान वास्तव में NULL हो खाली के बजाय?

आपको यह भी जांचना चाहिए कि यह गैर-पुनरावर्ती, एक-स्तरीय डाउन क्वेरी क्या करती है:

      select bb.ppn_i, ba.cpn_i, bb.bomname_i, ba.quantity_i, (BOMLevel + 1) as BOMLevel
      from BM010115 ba join
           BM010115 bb
           on ba.cpn_i = bb.ppn_i
      where bb.BOMNAME_I like '' and
            (ba.PPN_I like '0123105-HWT' and ba.BOMNAME_I like '')


  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. एसक्यूएल को स्टोर्ड प्रोसेस बनाम कोड में रखने के पक्ष और विपक्ष क्या हैं?

  3. SQL सर्वर प्रबंधन स्टूडियो 2008 वीपीएन पर विभिन्न डोमेन पर उपयोगकर्ता चलाता है

  4. मैं टी-एसक्यूएल में एक पंक्ति के रूप में एकाधिक पंक्तियों को कैसे वापस कर सकता हूं?

  5. सेवा शुरू करने के बाद पहली बार यह क्वेरी धीमी क्यों है?