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

एक ही पंक्ति से कई पंक्तियों को लौटाना

इसे आजमाएं:

create table #smalltable (id int, [begin] int, [end] int)
insert into #smalltable values (123,1,4)
insert into #smalltable values (124,1,12)
insert into #smalltable values (125,1,7)

;WITH digits (d) AS (
    SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION
    SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION
    SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION
    SELECT 0)
SELECT
    s.id, s.[begin], n.Number AS [End]
    FROM (SELECT i.d + ii.d * 10 + iii.d * 100 + iv.d * 1000 +
              v.d * 10000 + vi.d * 100000 AS Number
              FROM digits            i
                  CROSS JOIN digits  ii
                  CROSS JOIN digits  iii
                  CROSS JOIN digits  iv
                  CROSS JOIN digits  v
                  CROSS JOIN digits  vi
         ) AS N
        INNER JOIN #smalltable                                    s  ON 1=1
        INNER JOIN (SELECT MAX([end]) AS MaxEnd FROM #smalltable) dt ON 1=1
   WHERE n.Number > 0 AND n.Number<=dt.MaxEnd
    AND n.Number<=s.[end]
   ORDER BY s.id,n.Number

टिप्पणियां

  • अपने कॉलम को आरक्षित शब्दों का नाम न दें:"शुरू करें" और "अंत", आप किसी दिन मुझे धन्यवाद देंगे।
  • यदि आप इसे कई बार उत्पादन में चलाने की योजना बना रहे हैं, तो बनाएं एक संख्या तालिका
    और इसके बजाय इस क्वेरी का उपयोग करें:

काम करने से पहले एक टेबल नंबर होना चाहिए (ऊपर लिंक देखें)

SELECT
    s.id,s.[begin],n.Number AS [End]
    FROM Numbers                n
        INNER JOIN #smalltable  s ON 1=1
   WHERE  n.Number > 0 AND n.Number<=s.[end]
   ORDER BY s.id,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. कॉलम नाम उत्पन्न करने के लिए गतिशील एसक्यूएल?

  2. विजुअल फॉक्सप्रो डेटाबेस को SQL सर्वर डेटाबेस में कैसे बदलें

  3. मापदंडों के बिना SQL इंजेक्शन से बचना

  4. SQL सर्वर में 'पिवट' का उपयोग करके पंक्तियों को कॉलम में बदलें

  5. SQL सर्वर में Msg 512 "सबक्वायरी ने 1 से अधिक मान लौटाए" को ठीक करें