Converting rows as columns in SQL

Learn how to create comma delimited columns or multi-valued fields in SQL Server query results using CROSS APPLY and FOR XML. This converts multiple table rows into results in a single column as delimited values.

-- Create a table variable to store user data
DECLARE @myTable TABLE
(
UserName VARCHAR(50),
ArticleName VARCHAR(50)
)

-- Insert some data to table to work on that data
INSERT INTO @myTable(UserName, ArticleName)
VALUES ('Jack', 'ASP.NET')
INSERT INTO @myTable(UserName, ArticleName)
VALUES ('Jack', 'SQL Server')
INSERT INTO @myTable(UserName, ArticleName)
VALUES ('Jack', 'C#')
INSERT INTO @myTable(UserName, ArticleName)
VALUES ('Jack', 'VB.NET')

INSERT INTO @myTable(UserName, ArticleName)
VALUES ('David', 'Java')
INSERT INTO @myTable(UserName, ArticleName)
VALUES ('David', 'Java Beans')
INSERT INTO @myTable(UserName, ArticleName)
VALUES ('David', 'Java script')

SELECT UserName, ArticleName FROM @myTable

-- This is how the table looks after inserting the data


Now I want all the articles related to Jack and David in a single column.
This how we can achieve this

-- Cross join each user with his article. By cross joining we will get all the articles for each user
SELECT DISTINCT A.UserName,Articles FROM @myTable A
CROSS APPLY
(
-- Now get all the articles for each author in XML
SELECT ArticleName + ', ' FROM @myTable B WHERE A.UserName = B.UserName
FOR XML Path('')
) AS C (Articles)

The output of the below query is shown below.

-- By applying cross join I can able to get all the articles related with Jack and David.





By Cos mos   Popularity  (17716 Views)