T-SQL to Convert rows into single column

by Amol 17. February 2011 19:11

Many times we need to convert column values into rows. There are two scenarios here. First one is to concatenate all the values in column. And second one is to concatenate all the values in column along with another grouping column.

Consider you have below table

   CREATE TABLE [dbo].[MyTable]

   (

     Id INT,

     Name VARCHAR(255)

   )

   GO

Insert some data in above table.

   INSERT INTO [dbo].[MyTable] 

      (Id, Name)

   SELECT 1, 'A' UNION ALL   

   SELECT 1, 'B' UNION ALL

   SELECT 1, 'C' UNION ALL

   SELECT 1, 'D' UNION ALL

   SELECT 2, 'E' UNION ALL

   SELECT 2, 'F' UNION ALL

   SELECT 2, 'G' UNION ALL

   SELECT 3, 'H' UNION ALL

   SELECT 3, 'I' UNION ALL

   SELECT 4, 'J'

 

   GO

So you have following data in [dbo].[MyTable]

   Id  Name 
   ---------------------------
   1   A
   1   B
   1   C
   1   D
   2   E
   2   F
   2   G
   3   H
   3   I
   4   J

First – Concatenate all the values in column “Name”

   DECLARE @StrSQL VARCHAR(8000)

   SELECT @StrSQL = COALESCE(@StrSQL + ',', '') + Name

   FROM [dbo].[MyTable]

 

   SELECT @StrSQL

 

   GO

   Name 
   ------------------------
   A,B,C,D,E,F,G,H,I,J

 

Second – Concatenate all the values in column “Name” grouping by column “Id”

   SELECT  

      Id,

      STUFF( (

                  SELECT

                  ',' + Name AS 'text()'

                  FROM [dbo].[MyTable] t2

                  WHERE t2.id = t1.id

                  FOR XML PATH('')

               )

               ,1

               ,1

               ,''

             ) AS Name

   FROM [dbo].[MyTable] t1

   GROUP BY Id

   GO

   Id    Name
   -------------------------
   1     A,B,C,D
   2     E,F,G
   3     H,I
   4     J

 

Tags:

SQL Server Scripts

Add comment




  Country flag
biuquote
  • Comment
  • Preview
Loading


Category

Recent Posts

Tag cloud