Merging Several Rows into a Single Row in SQL Server

Introduction

During development we come across a scenario several times, where we have to merge multiple SQL table rows into a single row. The blog explains how this can be achieved using SQL STUFF function. Though the code it very simple yet it is very useful.

Example

Creating a dummy table to hold the data

DECLARE @TABLE AS TABLE(Sampletext NVARCHAR(50))

INSERT INTO @TABLE VALUES('THIS IS LINE 1')
INSERT
INTO @TABLE VALUES('THIS IS LINE 2')
INSERT
INTO @TABLE VALUES('THIS IS LINE 3')
INSERT
INTO @TABLE VALUES('THIS IS LINE 4')
INSERT
INTO @TABLE VALUES('THIS IS LINE 5')

SELECT * FROM @TABLE

Here is result

Sample Text

THIS IS LINE 1

THIS IS LINE 2

THIS IS LINE 3

THIS IS LINE 4

THIS IS LINE 5

Using STUFF function to merge the rows

SELECT STUFF((SELECT SampleText + ' \r\n ' FROM @TABLE FOR XML PATH ('')),1,0,'') as Sampletext

Here is result

Sample Text

THIS IS LINE 1 \r\n THIS IS LINE 2 \r\n THIS IS LINE 3 \r\n THIS IS LINE 4 \r\n THIS IS LINE 5 \r\n

Summary

In this blog, I discussed how we can merge several rows from a SQL table to a single row. This is very useful when we have to summarize the activity performed at different time frame. Let say you have a particular player who has played several games within a specific time frame and you have logged the detail of each game in a table. Now at the end of year you have to generate a report for all the players and their played games detail in a row. In that case this query could be a good option.