SQLServer – Convert multiple rows into one row, comma delimited.


SQLServer – Convert multiple rows into one row, comma delimited.

Working for my current client, one of the reports that needed to be built was an Order record that showed the items listed but as a comma delimited string.  Of course, the database tables show each item as a new record which is assigned to master order record.  You’ve all seen this before.
Order Table
OrderIDOrderNumber
1X1
2X2
3X3
Order Detail Table
OrderIDOrderDetailIDItem
11O1Item1
12O1Item2
23O2Item1
24O2Item2
35O3Item1
The SSRS report needs to show 3 records with the Items listed separated by commas.
OrderItems
X1O1Item1, O1Item2
X2O2Item1, O2Item2
X3O3Item1
I did some digging around on the internet and found a few options
  1. XML
  2. Recursive CTE
  3. Cursor
I’m sure there are a few more out there, but these seemed to be the most reasonable.
In the end, I decided to use the XML because it was much easier to write and performed well.
Here is what I ended up with.
SELECT DISTINCT
OrderDate,
OrderNumber,
Items = SUBSTRING( ( SELECT ‘,’ + ItemCode
FROM tblOrders t2
WHERE t1.OrderNumber = t2.OrderNumber FOR XML PATH(”), elements)
,2,500)
FROM tblOrders t1

Comments

Popular posts from this blog

Authorize.net Integration eCommerce Payment Gateway ( Direct Post Method New! )

Get Organised with OneNote

Test your Sql Query Online