This is relatively trivial to do with a correlated subquery. You can't use the COALESCE method highlighted in the blog post you mention unless you extract that to a user-defined function (or unless you only want to return one row at a time). Here is how I typically do this:

    DECLARE @x TABLE 
    (
      id INT, 
      row_num INT, 
      customer_code VARCHAR(32), 
      comments VARCHAR(32)
    );
    
    INSERT @x SELECT 1,1,'Dilbert','Hard'
    UNION ALL SELECT 1,2,'Dilbert','Worker'
    UNION ALL SELECT 2,1,'Wally','Lazy';
    
    SELECT id, customer_code, comments = STUFF((SELECT ' ' + comments 
        FROM @x AS x2 WHERE id = x.id
         ORDER BY row_num
         FOR XML PATH('')), 1, 1, '')
    FROM @x AS x
    GROUP BY id, customer_code
    ORDER BY id;

If you have a case where the data in comments could contain unsafe-for-XML characters (`>`, `<`, `&`), you should change this:

         FOR XML PATH('')), 1, 1, '')

To this more elaborate approach:

         FOR XML PATH(''), TYPE(N'(./text())[1]', N'varchar(max)').value), 1, 1, '')

(Be sure to use the right destination data type, `varchar` or `nvarchar`, and the right length, and prefix all string literals with `N` if using `nvarchar`.)



this is Correct..
  for xml path(''), type).value('(./text())[1]','varchar(max)').value), 1, 1, '')