You have no link from your correlated subquery to your main query (i.e. you will be bringing back a list of all weekends for all markets). This should work for you:
SELECT MarketName = Market.Name,
DayOff = ISNULL(STUFF(( SELECT '; ' + CAST(DayOff AS VARCHAR(15))
FROM m2m_market_weekends m2m
INNER JOIN Weekend w
ON m2m.weekend_id = w.ID
WHERE m2m.market_id = Market.ID
ORDER BY DayOff
FOR XML PATH (''), TYPE
).value('.', 'NVARCHAR(MAX)'),
1, 1, ''),
'NULL')
FROM Market
GROUP BY Market.Name, Market.ID;
Note I changed your XML method slightly since just using (SELECT .. FOR XML PATH(''))
causes xml characters to be escaped (so if you had >
inside the subquery it becomes >
, however, if you use the 'value
method, i.e. FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX))
XML characters are preserved