This is pretty hacky, but the result is what you need:
The trick is to use intermediate XML in this form:
<x>ABC</x> <x>2015.01.21,52</x> <x>2015.01.22,12</x> <x>2015.01.23,32</x> <x>DEF</x> <x>2015.01.21,78</x> <x>2015.01.22,53</x>
Then itβs easy to read each βnodeβ:
SET LANGUAGE ENGLISH; DECLARE @tbl TABLE(Name VARCHAR(100),Date DATE,Value INT); INSERT INTO @tbl VALUES ('ABC','1/21/2015',52) ,('ABC','1/22/2015',12) ,('ABC','1/23/2015',32) ,('DEF','1/21/2015',78) ,('DEF','1/22/2015',53); WITH DistinctNames AS ( SELECT DISTINCT NAME FROM @tbl ) SELECT One.Line.value('.','varchar(100)') AS OneLine FROM ( SELECT ( SELECT Name AS [x] ,( SELECT CONVERT(VARCHAR(10),t.Date,102) + ',' + CAST(t.Value AS VARCHAR(100)) FROM @tbl AS t WHERE t.Name=DistinctNames.Name FOR XML PATH('x'),TYPE ) FROM DistinctNames FOR XML PATH(''),TYPE ) ) AS tbl(x) CROSS APPLY x.nodes('/x') AS One(Line)
Shnugo
source share