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

एक से अधिक कॉलम के लिए क्रॉस अप्लाई का उपयोग करना

इसका उत्तर देना आसान हो सकता है यदि हम आपका स्प्लिट स्ट्रिंग फ़ंक्शन देख सकें। मेरा उत्तर मेरे स्प्लिट फ़ंक्शन के एक संस्करण का उपयोग कर रहा है जो मेरे पास है।

मैं आपके स्प्लिट फ़ंक्शन में एक पंक्ति संख्या शामिल करूंगा जिसका उपयोग आप स्प्लिट स्ट्रिंग और स्प्लिट मानों में शामिल होने के लिए कर सकते हैं।

स्प्लिट फंक्शन:

CREATE FUNCTION [dbo].[Split](@String varchar(MAX), @Delimiter char(1))       
returns @temptable TABLE (items varchar(MAX), rn int)       
as       
begin      
    declare @idx int       
    declare @slice varchar(8000)   
    declare @rn int = 1 -- row number that increments with each value in the delimited string

    select @idx = 1       
        if len(@String)<1 or @String is null  return       

    while @idx!= 0       
    begin       
        set @idx = charindex(@Delimiter,@String)       
        if @idx!=0       
            set @slice = left(@String,@idx - 1)   
        else       
            set @slice = @String       

        if(len(@slice)>0)  
            insert into @temptable(Items, rn) values(@slice, @rn)       

        set @String = right(@String,len(@String) - @idx)       
        set @rn = @rn +1

        if len(@String) = 0 break       
    end   
return 
end;

फिर यदि आपके पास विभाजित करने के लिए एक से अधिक स्तंभ हैं, तो आप निम्न के समान क्वेरी का उपयोग कर सकते हैं:

INSERT INTO dbo.tblSplitData(SplitKey, SplitString, SplitValues)
select s.rawkey,
  s.splitstring,
  v.splitvalues
from
(
  SELECT d.RawKey, d.delimitedstring, d.delimitedvalues, 
    c.items SplitString, 
    c.rn
  FROM dbo.tblRawData d
  CROSS APPLY dbo.Split(d.DelimitedString, ',') c
) s
inner join
(
  SELECT d.RawKey, d.delimitedstring, d.delimitedvalues, 
    c.items SplitValues, 
    c.rn
  FROM dbo.tblRawData d
  CROSS APPLY dbo.Split(d.DelimitedValues, ',') c
) v
  on s.rawkey = v.rawkey
  and s.delimitedstring = v.delimitedstring
  and s.rn = v.rn;

देखें SQL Fiddle with Demo

यह दो उपश्रेणियों का उपयोग करता है जो विभाजित मूल्यों की सूची उत्पन्न करते हैं, फिर वे विभाजन फ़ंक्शन द्वारा बनाई गई पंक्ति संख्या का उपयोग करके जुड़ जाते हैं।



  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. टेबल के मालिक को बदलना

  3. SQL सर्वर में किसी अन्य डेटाबेस से किसी तालिका के डेटा का चयन कैसे करें?

  4. Msg 529 त्रुटि के साथ sqlserver में कनवर्ट करें समस्या

  5. SQL सर्वर समानांतर बैकअप पुनर्स्थापना -1