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

क्या टी-एसक्यूएल में तारों को जोड़ने के लिए एक समग्र कार्य है?

SQL सर्वर 2017 और उसके बाद के उपयोग के लिए:

STRING_AGG ()

set nocount on;
declare @YourTable table (RowID int, HeaderValue int, ChildValue varchar(5))
insert into @YourTable VALUES (1,1,'CCC')
insert into @YourTable VALUES (2,2,'B<&>B')
insert into @YourTable VALUES (3,2,'AAA')
insert into @YourTable VALUES (4,3,'<br>')
insert into @YourTable VALUES (5,3,'A & Z')
set nocount off
SELECT
    t1.HeaderValue
        ,STUFF(
                   (SELECT
                        ', ' + t2.ChildValue
                        FROM @YourTable t2
                        WHERE t1.HeaderValue=t2.HeaderValue
                        ORDER BY t2.ChildValue
                        FOR XML PATH(''), TYPE
                   ).value('.','varchar(max)')
                   ,1,2, ''
              ) AS ChildValues
    FROM @YourTable t1
    GROUP BY t1.HeaderValue

SELECT
    HeaderValue, STRING_AGG(ChildValue,', ')
    FROM @YourTable
    GROUP BY HeaderValue

आउटपुट:

HeaderValue 
----------- -------------
1           CCC
2           B<&>B, AAA
3           <br>, A & Z

(3 rows affected)

SQL Server 2005 और 2016 तक के लिए, आपको कुछ ऐसा करने की आवश्यकता है:

--Concatenation with FOR XML and eleminating control/encoded character expansion "& < >"
set nocount on;
declare @YourTable table (RowID int, HeaderValue int, ChildValue varchar(5))
insert into @YourTable VALUES (1,1,'CCC')
insert into @YourTable VALUES (2,2,'B<&>B')
insert into @YourTable VALUES (3,2,'AAA')
insert into @YourTable VALUES (4,3,'<br>')
insert into @YourTable VALUES (5,3,'A & Z')
set nocount off
SELECT
    t1.HeaderValue
        ,STUFF(
                   (SELECT
                        ', ' + t2.ChildValue
                        FROM @YourTable t2
                        WHERE t1.HeaderValue=t2.HeaderValue
                        ORDER BY t2.ChildValue
                        FOR XML PATH(''), TYPE
                   ).value('.','varchar(max)')
                   ,1,2, ''
              ) AS ChildValues
    FROM @YourTable t1
    GROUP BY t1.HeaderValue

आउटपुट:

HeaderValue ChildValues
----------- -------------------
1           CCC
2           AAA, B<&>B
3           <br>, A & Z

(3 row(s) affected)

साथ ही, देखें, सभी नहीं FOR XML PATH concatenations मेरे उपरोक्त उदाहरण की तरह XML विशेष वर्णों को ठीक से संभाल लेगा।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. CAST () का उपयोग करके SQL सर्वर में दिनांक स्वरूपों के बीच कनवर्ट कैसे करें

  2. केवल पंक्तियों द्वारा sql समूह जो क्रम में हैं

  3. SQL - एक varchar डेटा प्रकार का डेटाटाइम डेटा प्रकार में रूपांतरण के परिणामस्वरूप एक आउट-ऑफ-रेंज मान होता है

  4. Ubuntu पर sqlcmd और bcp कैसे स्थापित करें?

  5. कुल कार्य के बिना TSQL धुरी