Click here to Skip to main content
15,907,493 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
Hi,
I have a table in sql server in which one column has comma seprated values, i want to generate a new row for each comma seprated value. For ex.

Table :

    col1    col2   col3
----------------------------
     1       45     7
     2       48     6,7
     3       46     4



output should be :

    col1    col2   col3
----------------------------
     1       45     7
     2       48     6
     2       48     7
     3       46     4


Thanks in advance.
Posted
Updated 18-May-12 10:54am
v2
Comments
OriginalGriff 18-May-12 4:21am    
And what have you tried?
Where are you stuck?
bhagirathimfs 18-May-12 4:22am    
While inserting to the table do this.
means insert into table for each value
Example:now you are inserting like this
col1 =1 col2=45 and col3=6,7
now insert into table like this
col1=1 col2=45 col3=6
than insert again
col1=2 col2=25 col=7
Ashwani Dhiman 18-May-12 4:33am    
I have to compare the value of Col3 which is comma seprated. These tables are created previously with this structure, thats why i thought to break these value in rows.
Jim Jos 18-May-12 4:27am    
Are you trying to do it with Store Proc or .NET code? .NET would be easier..
Ashwani Dhiman 18-May-12 4:35am    
Store Proc

Please see this reference http://stackoverflow.com/questions/5493510/turning-a-comma-separated-string-into-individual-rows[^] where answer to a similar question is given.
 
Share this answer
 
Comments
Wendelius 18-May-12 17:00pm    
Good link!
VJ Reddy 18-May-12 20:27pm    
Thank you, Mika :)
Maciej Los 18-May-12 17:26pm    
Good link, +5!
VJ Reddy 18-May-12 20:28pm    
Thank you, losmac :)
hi, use this code to split the value and write a stored procedure to store,

SQL
Create FUNCTION [dbo].[fn_Split] (@list nvarchar(MAX))  
   RETURNS @tbl TABLE (number int NOT NULL) AS  
BEGIN  
   DECLARE @pos        int,  
           @nextpos    int,  
           @valuelen   int  
  
   SELECT @pos = 0, @nextpos = 1  
  
   WHILE @nextpos > 0  
   BEGIN  
      SELECT @nextpos = charindex(',', @list, @pos + 1)  
      SELECT @valuelen = CASE WHEN @nextpos > 0  
                              THEN @nextpos  
                              ELSE len(@list) + 1  
                         END - @pos - 1  
      INSERT @tbl (number)  
         VALUES (convert(int, substring(@list, @pos + 1, @valuelen)))  
      SELECT @pos = @nextpos  
   END  
  RETURN  
END  
  
-- Select * from dbo.fn_Split('1,2,3')
 
Share this answer
 
Comments
Maciej Los 18-May-12 17:26pm    
Good work, 5!
S.P.Tiwari 22-May-12 5:48am    
thanks.

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900