t-sql split comma delimited rowshttp://forums.asp.net/t/1770975.aspx/1?t+sql+split+comma+delimited+rowsMon, 20 Feb 2012 09:40:53 -050017709754838525http://forums.asp.net/p/1770975/4838525.aspx/1?t+sql+split+comma+delimited+rowst-sql split comma delimited rows <p>how can i get this output with stored procedure.<br> <br> </p> <table height="100" width="172" bgcolor="#ffffff" border="1"> <tbody> <tr bgcolor="#c6c3b5"> <td align="center" width="51"><span face="Verdana" style="font-family:Verdana"><strong>Id</strong></span></td> <td align="center" width="119"><span face="Verdana" style="font-family:Verdana"><strong>AllNames</strong></span></td> </tr> <tr> <td align="center" width="51"><span face="Verdana" style="font-family:Verdana">1</span></td> <td align="center" width="119"><span face="Verdana" style="font-family:Verdana">A,B,C</span></td> </tr> <tr> <td align="center" width="51"><span face="Verdana" style="font-family:Verdana">2</span></td> <td align="center" width="119"><span face="Verdana" style="font-family:Verdana">A,B</span></td> </tr> <tr> <td align="center" width="51"><span face="Verdana" style="font-family:Verdana">3</span></td> <td align="center" width="120"><span face="Verdana" style="font-family:Verdana">X,Y,Z</span></td> </tr> </tbody> </table> <p><span face="Verdana" style="font-family:Verdana">output</span></p> <table width="141" border="1"> <tbody> <tr bgcolor="#c6c3b5"> <td align="center" width="52"><strong><span><span color="#000000" style="color:#000000">Id</span></span></strong></td> <td align="center" width="87"><strong><span><span color="#000000" style="color:#000000">Names</span></span></strong></td> </tr> <tr> <td align="center" width="52"><span><span color="#000000" style="color:#000000">1</span></span></td> <td align="center" width="87"><span><span color="#000000" style="color:#000000">A</span></span></td> </tr> <tr> <td align="center" width="52"><span><span color="#000000" style="color:#000000">1</span></span></td> <td align="center" width="87"><span><span color="#000000" style="color:#000000">B</span></span></td> </tr> <tr> <td align="center" width="52"><span><span color="#000000" style="color:#000000">1</span></span></td> <td align="center" width="87"><span><span color="#000000" style="color:#000000">C</span></span></td> </tr> <tr> <td align="center" width="52"><span><span color="#000000" style="color:#000000">2</span></span></td> <td align="center" width="87"><span><span color="#000000" style="color:#000000">A</span></span></td> </tr> <tr> <td align="center" width="52"><span><span color="#000000" style="color:#000000">2</span></span></td> <td align="center" width="87"><span><span color="#000000" style="color:#000000">B</span></span></td> </tr> <tr> <td align="center" width="52"><span><span color="#000000" style="color:#000000">3</span></span></td> <td align="center" width="87"><span><span color="#000000" style="color:#000000">X</span></span></td> </tr> <tr> <td align="center" width="52"><span><span color="#000000" style="color:#000000">3</span></span></td> <td align="center" width="87"><span><span color="#000000" style="color:#000000">Y</span></span></td> </tr> <tr> <td align="center" width="52"><span><span color="#000000" style="color:#000000">3</span></span></td> <td align="center" width="87"><span><span color="#000000" style="color:#000000">Z</span></span></td> </tr> </tbody> </table> <p><span face="Verdana" style="font-family:Verdana"><b><br> </b></span></p> 2012-02-18T06:37:29-05:004838527http://forums.asp.net/p/1770975/4838527.aspx/1?Re+t+sql+split+comma+delimited+rowsRe: t-sql split comma delimited rows <p>For example, in stead of:</p> <p>ProjectID &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Label<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br> 1200 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; label1<br> 1200 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; label2<br> 1200 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; label3</p> <p>I would like the result of my query to look like this:<br> ProjectID &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Label<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br> 1200 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;label1, label2, label3</p> <p>In SQL Server 2000 this isnt such a straightforward thing to do. After some googling, I came across a very useful&nbsp;<a title="SQLTeam" href="http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=53293" target="_blank">forum</a>that helped me out. I can use a function to return the list of labels:</p> <p>USE myDatabaseName<br> GO<br> CREATE FUNCTION dbo.ConcatLabels(@projectID int)<br> RETURNS VARCHAR(8000)<br> AS<br> BEGIN<br> DECLARE @Output VARCHAR(8000)<br> SELECT @Output = COALESCE(@Output&#43;, , ) &#43; CONVERT(varchar(20), b.label_name)<br> FROM dbo.[T_labelproject] a<br> JOIN dbo.T_label b ON b.labelID = a.labelID<br> WHERE a.projectID = @projectID<br> ORDER BY b.label_Name<br> RETURN @Output<br> END<br> GO</p> <p>Query it with:<br> SELECT projectID, dbo.ConcatLabels(projectID) AS Label FROM T_Project</p> 2012-02-18T06:42:07-05:004838528http://forums.asp.net/p/1770975/4838528.aspx/1?Re+t+sql+split+comma+delimited+rowsRe: t-sql split comma delimited rows <pre class="prettyprint">--first of all create this function -- Create FUNCTION [dbo].[Split](@String varchar(8000), @Delimiter char(1)) returns @temptable TABLE (items varchar(8000)) as begin declare @idx int declare @slice varchar(8000) select @idx = 1 if len(@String)&lt;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)&gt;0) insert into @temptable(Items) values(@slice) set @String = right(@String,len(@String) - @idx) if len(@String) = 0 break end return end GO --now run your query as below declare @table table ( Id int,AllNames varchar(100) ) insert into @table select 1,'A,B,C' union all select 2,'A,B' union all select 3,'X,Y,Z' select Id,items as Name from @table CROSS APPLY dbo.Split(AllNames,',')</pre> 2012-02-18T06:42:59-05:004838536http://forums.asp.net/p/1770975/4838536.aspx/1?Re+t+sql+split+comma+delimited+rowsRe: t-sql split comma delimited rows <p>create FUNCTION [dbo].[Split]<br> (<br> &nbsp;&nbsp;&nbsp; @ItemList NVARCHAR(4000), <br> &nbsp;&nbsp;&nbsp; @delimiter CHAR(1)<br> )<br> RETURNS @IDTable TABLE (RowID&nbsp;&nbsp; smallint IDENTITY(1,1), Item VARCHAR(50)) &nbsp;<br> AS&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br> <br> BEGIN&nbsp;&nbsp; &nbsp;<br> &nbsp;&nbsp;&nbsp; DECLARE @tempItemList NVARCHAR(4000)<br> &nbsp;&nbsp;&nbsp; SET @tempItemList = @ItemList<br> &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br> &nbsp;&nbsp;&nbsp; DECLARE @i INT&nbsp;&nbsp; &nbsp;<br> &nbsp;&nbsp;&nbsp; DECLARE @Item NVARCHAR(4000)<br> <br> &nbsp;&nbsp;&nbsp; SET @tempItemList = REPLACE (@tempItemList, ' ', '')<br> &nbsp;&nbsp;&nbsp; SET @i = CHARINDEX(@delimiter, @tempItemList)<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Declare @RowId Nvarchar(200)<br> &nbsp;&nbsp;&nbsp; WHILE (LEN(@tempItemList) &gt; 0)<br> &nbsp;&nbsp;&nbsp; BEGIN<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IF @i = 0<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SET @Item = @tempItemList<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ELSE<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SET @Item = LEFT(@tempItemList, @i - 1)<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; INSERT INTO @IDTable(Item) VALUES(@Item)<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IF @i = 0<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SET @tempItemList = ''<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ELSE<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SET @tempItemList = RIGHT(@tempItemList, LEN(@tempItemList) - @i)<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SET @i = CHARINDEX(@delimiter, @tempItemList)<br> &nbsp;&nbsp;&nbsp; END <br> &nbsp;&nbsp;&nbsp; RETURN<br> END<span><span class="keyword"></span></span></p> <p><span><span class="keyword">select</span><span>&nbsp;</span><span class="keyword">top</span><span>&nbsp;10&nbsp;*&nbsp;</span><span class="keyword">from</span><span>&nbsp;dbo.split(</span><span class="string">'Chennai,Bangalore,Mumbai'</span><span>,</span><span class="string">','</span><span>)&nbsp; </span></span></p> <p><span><span>please mark as answer<br> </span></span></p> 2012-02-18T07:02:01-05:004838933http://forums.asp.net/p/1770975/4838933.aspx/1?Re+t+sql+split+comma+delimited+rowsRe: t-sql split comma delimited rows <p>i have 200 records in my table. i gave the A,B,C as a sample.<br> <br> <strong>1 A,B,C<br> 2 A,B<br> 3 X,Y,Z<br> </strong><strong>4&nbsp;D,&nbsp;F , G<br> <strong>5&nbsp; . , . , .</strong><br> <strong>6&nbsp; . , . , .<br> 7</strong><strong>&nbsp; . , . , .</strong><br> <strong>8&nbsp; . , . , .</strong><br> <strong>9&nbsp; . , . , .</strong><br> <strong>&nbsp;&nbsp;&nbsp; . , . , .</strong><br> <strong>&nbsp;&nbsp;&nbsp; .&nbsp;&nbsp; . , . , .</strong><br> <strong>200&nbsp;&nbsp;&nbsp; .&nbsp;&nbsp; . , . , .<br> <br> </strong></strong>&nbsp;FOR THIS ONLY&nbsp;&nbsp;<span class="hps">CERTAIN</span> VARIABLES.&nbsp;&nbsp;&nbsp;<span class="keyword">select</span> <span class="keyword">top</span> 10 * <span class="keyword">from</span> dbo.split(<strong><span class="string">'Chennai,Bangalore,Mumbai'</span></strong>,<span class="string">','</span>) HOW CAN I MAKE FOR ALL ROWS?<strong><strong><span><span> </span></span></strong></strong></p> <table border="1" width="141"> <tbody> <tr> <td width="52" align="center"><span><span color="#000000" style="color:#000000">1</span></span></td> <td width="87" align="center"><span><span color="#000000" style="color:#000000">A</span></span></td> </tr> <tr> <td width="52" align="center"><span><span color="#000000" style="color:#000000">1</span></span></td> <td width="87" align="center"><span><span color="#000000" style="color:#000000">B</span></span></td> </tr> <tr> <td width="52" align="center"><span><span color="#000000" style="color:#000000">1</span></span></td> <td width="87" align="center"><span><span color="#000000" style="color:#000000">C</span></span></td> </tr> <tr> <td width="52" align="center"><span><span color="#000000" style="color:#000000">2</span></span></td> <td width="87" align="center"><span><span color="#000000" style="color:#000000">A</span></span></td> </tr> <tr> <td width="52" align="center"><span><span color="#000000" style="color:#000000">2</span></span></td> <td width="87" align="center"><span><span color="#000000" style="color:#000000">B</span></span></td> </tr> <tr> <td width="52" align="center"><span><span color="#000000" style="color:#000000">3</span></span></td> <td width="87" align="center"><span><span color="#000000" style="color:#000000">X</span></span></td> </tr> <tr> <td width="52" align="center"><span><span color="#000000" style="color:#000000">3</span></span></td> <td width="87" align="center"><span><span color="#000000" style="color:#000000">Y</span></span></td> </tr> <tr> <td width="52" align="center"><span><span color="#000000" style="color:#000000">3<br> 4<br> 4<br> 4</span></span></td> <td width="87" align="center"><span><span color="#000000" style="color:#000000">Z<br> D<br> F<br> G</span></span></td> </tr> </tbody> </table> <p><strong><strong><strong><strong></strong></strong></strong></strong>&nbsp;</p> <p><strong><strong><strong><strong></strong></strong></strong></strong></p> <p><strong><strong></strong></strong></p> <p><strong><strong></strong></strong>&nbsp;</p> <p><strong><strong></strong></strong>&nbsp;</p> <p><strong><strong></strong></strong></p> 2012-02-18T16:48:45-05:004838939http://forums.asp.net/p/1770975/4838939.aspx/1?Re+t+sql+split+comma+delimited+rowsRe: t-sql split comma delimited rows <pre class="prettyprint">--Consider this your table with multiple rows(may be 200 rows) --it is just created for demonstration WITH TBL AS ( SELECT '1' as col1, 'A,B,C' as col2 UNION SELECT '2' as col1, 'A,B' as col2 UNION SELECT '3' as col1, 'X,Y,Z' as col2 UNION SELECT '4' as col1, 'D,F,G' as col2 ) --Run this query on your table replacing column names with yours SELECT col1, Tags.val.value('.', 'VARCHAR(MAX)') AS col2 FROM( SELECT col1, CAST('&lt;t&gt;' &#43; REPLACE(col2, ',', '&lt;/t&gt;&lt;t&gt;') &#43; '&lt;/t&gt;' AS XML) AS TAG FROM TBL ) TAB CROSS APPLY TAG.nodes('/t') as Tags(val)</pre> 2012-02-18T17:05:40-05:004839114http://forums.asp.net/p/1770975/4839114.aspx/1?Re+t+sql+split+comma+delimited+rowsRe: t-sql split comma delimited rows <pre class="lang-sql prettyprint"><span face="monospace" style="font-family:monospace"></span></pre> <pre class="lang-sql prettyprint"><span face="monospace"><br><span style="white-space:normal"></span></span></pre> <p>i found it this url<br> http://stackoverflow.com/questions/3284426/splitting-comma-delimited-cell-data<br> for this table, this code works.</p> <pre class="lang-sql prettyprint"><span face="monospace"><span style="white-space:normal"></span></span></pre> <p>owners<br> =================<br> owner_id int, <br> parcelID int = <strong>autonumber</strong> <br> sample row (owner_id = '13482, 21461', parcelID = 318)</p> <pre class="lang-sql prettyprint"><span face="monospace"><span style="white-space:normal"></span></span></pre> <p>sample row (owner_id = '13782, 21431', parcelID = 319)</p> <pre class="lang-sql prettyprint"><span face="monospace"><span style="white-space:normal"></span></span></pre> <p>DECLARE @STR VARCHAR(MAX)</p> <pre class="lang-sql prettyprint"><span face="monospace"><span style="white-space:normal"></span></span></pre> <p><br> SET @STR = (SELECT DISTINCT STUFF( (SELECT ',' &#43; owner_ID from owners FOR XML PATH('')),1,1,'') FROM owners)</p> <pre class="lang-sql prettyprint"><span face="monospace"><span style="white-space:normal"></span></span></pre> <p><br> SELECT * FROM [dbo].[Split](@STR,','),owners</p> <pre class="lang-sql prettyprint"><span face="monospace"><span style="white-space:normal"></span></span></pre> <p>output__<br> 1 13482<br> 2 21461<br> 3 13782<br> 4 21431</p> <pre class="lang-sql prettyprint"><span face="monospace"><span style="white-space:normal"></span></span></pre> <p><strong>but i wanna output is such that</strong></p> <p><strong></strong>parcelID = 318 ownerID =13482<br> parcelID = 318 ownerID =21431<br> parcelID = 319 ownerID =13782<br> parcelID = 319 ownerID =21461<br> <br> </p> <pre class="lang-sql prettyprint"><span face="monospace"><span style="white-space:normal"></span></span></pre> <p><br> CREATE FUNCTION dbo.Split(@String varchar(8000), @Delimiter char(1)) <br> returns @temptable TABLE (items varchar(8000)) <br> as <br> begin <br> declare @idx int <br> declare @slice varchar(8000)</p> <pre class="lang-sql prettyprint"><span face="monospace"><span style="white-space:normal"></span></span></pre> <p>select @idx = 1 <br> if len(@String)&lt;1 or @String is null return</p> <pre class="lang-sql prettyprint"><span face="monospace"><span style="white-space:normal"></span></span></pre> <p>while @idx!= 0 <br> begin <br> set @idx = charindex(@Delimiter,@String) <br> if @idx!=0 <br> set @slice = left(@String,@idx - 1) <br> else <br> set @slice = @String</p> <pre class="lang-sql prettyprint"><span face="monospace"><span style="white-space:normal"></span></span></pre> <p>if(len(@slice)&gt;0) <br> insert into @temptable(Items) values(@slice)</p> <pre class="lang-sql prettyprint"><span face="monospace"><span style="white-space:normal"></span></span></pre> <p>set @String = right(@String,len(@String) - @idx) <br> if len(@String) = 0 break <br> end <br> return <br> end</p> <pre class="lang-sql prettyprint"><span face="monospace"><span style="white-space:normal"></span></span></pre> <p></p> <pre class="lang-sql prettyprint"><span face="monospace"><span style="white-space:normal"><br></span></span></pre> 2012-02-18T22:24:25-05:004839297http://forums.asp.net/p/1770975/4839297.aspx/1?Re+t+sql+split+comma+delimited+rowsRe: t-sql split comma delimited rows <pre class="prettyprint">/* CREATE FUNCTION dbo.Split( @delimited NVARCHAR(MAX), @delimiter NVARCHAR(100) ) RETURNS @t TABLE (id INT IDENTITY(1,1), val NVARCHAR(MAX)) AS BEGIN DECLARE @xml XML SET @xml = N'&lt;t&gt;' &#43; REPLACE(@delimited,@delimiter,'&lt;/t&gt;&lt;t&gt;') &#43; '&lt;/t&gt;' INSERT INTO @t(val) SELECT r.value('.','varchar(MAX)') as item FROM @xml.nodes('/t') as records(r) RETURN END */ DECLARE @TAB TABLE (Id INT, AllNames VARCHAR(100)) INSERT INTO @TAB SELECT 1, 'A,B,C' UNION ALL SELECT 2, 'A,B' UNION ALL SELECT 3, 'X,Y,Z' SELECT A.id, B.val FROM @TAB A CROSS APPLY dbo.Split(AllNames, ',') B</pre> 2012-02-19T03:08:15-05:004840295http://forums.asp.net/p/1770975/4840295.aspx/1?Re+t+sql+split+comma+delimited+rowsRe: t-sql split comma delimited rows <p>have you tried my query posted above?</p> <p></p> 2012-02-20T05:07:35-05:004840824http://forums.asp.net/p/1770975/4840824.aspx/1?Re+t+sql+split+comma+delimited+rowsRe: t-sql split comma delimited rows <p>One more ;)</p> <h4><a href="http://www.playwithsql.com/2010/12/split-csv-string-in-table.html" rel="bookmark">Split CSV string in a Table</a>&nbsp;</h4> 2012-02-20T09:40:53-05:00