In the direct path, you can (possibly) use pivot or use dynamic SQL:
DECLARE @tbl TABLE([month] VARCHAR(100),[count] INT);
INSERT INTO @tbl VALUES
('January',578)
,('February',300)
,('March',147)
,('April',45)
,('May',8);
DECLARE @cmd VARCHAR(MAX)=
'SELECT ' +
(
STUFF(
(
SELECT ',' + CAST(tbl.[count] AS VARCHAR(100)) + ' AS [' + tbl.[month] + ']'
FROM @tbl AS tbl
FOR XML PATH('')
),1,1,''
)
)
+
' FOR XML PATH('''');';
EXEC(@cmd);
Result
<January>578</January>
<February>300</February>
<March>147</March>
<April>45</April>
<May>8</May>
But I would not do that ...
It was much better (much easier to request!) To create such a structure:
SELECT tbl.[month] AS [@name]
,tbl.[count] AS [*]
FROM @tbl AS tbl
FOR XML PATH('month');
Result
<month name="January">578</month>
<month name="February">300</month>
<month name="March">147</month>
<month name="April">45</month>
<month name="May">8</month>
source
share