Search code examples
sql-servert-sqlsql-server-2008

how to convert column values into comma seperated row vlaues


I have a table with values as

FKTABLE_NAME               FKCOLUMN_NAME               PKCOLUMN_NAME
table1                     column1                        column1
table1                     column2                        column2
table2                     column1                        column1
table2                     column2                        column2

How I need to convert this into

FKTABLE_NAME               FKCOLUMN_NAME               PKCOLUMN_NAME

tablel1                    column1,column2                column1,column2
table12                    column1,column2                column1,column2

Basically, I am trying to get the comma seperated columns group by the table name.

thanks


Solution

  • Here's a working query on any db

    select distinct table_name,
      stuff((select ','+data_type
       from information_schema.columns b
       where b.table_name=a.table_name
       for xml path(''),type).value('.[1]','nvarchar(max)'),1,1,'') AS data_types,
      stuff((select ','+column_name
       from information_schema.columns b
       where b.table_name=a.table_name
       for xml path(''),type).value('.[1]','nvarchar(max)'),1,1,'') AS column_names
    from information_schema.columns a
    

    And here is your query

    select distinct FKTABLE_NAME,
      stuff((select ','+FKCOLUMN_NAME
       from tbl b
       where b.FKTABLE_NAME=a.FKTABLE_NAME
       for xml path(''),type).value('.[1]','nvarchar(max)'),1,1,'') AS FKCOLUMN_NAMES,
      stuff((select ','+PKCOLUMN_NAME
       from tbl b
       where b.FKTABLE_NAME=a.FKTABLE_NAME
       for xml path(''),type).value('.[1]','nvarchar(max)'),1,1,'') AS PKCOLUMN_NAMES
    from tbl a