Return Select Statement as formatted HTML (SQL 2005)

listed in answer

Return Select Statement as formatted HTML (SQL 2005)
0 votes, 0.00 avg. rating (0% score)

ANSWER:

Here is the code for SQL Server 2005:

DECLARE @x TABLE(Gender VARCHAR(6), Age INT, Name VARCHAR(32));

INSERT @x SELECT 'Male',   30, 'Bill'  UNION ALL SELECT 'Female', 27, 'Jenny'
UNION ALL SELECT 'Female', 27, 'Debby' UNION ALL SELECT 'Male',   44, 'Frank';

DECLARE @html NVARCHAR(MAX);
SET @html = N'';

;WITH x AS ( SELECT x.Age, x.Gender, x.Name,
    dr = DENSE_RANK() OVER (PARTITION BY x.Gender ORDER BY x.Age),
    gn = ROW_NUMBER() OVER (PARTITION BY x.Gender ORDER BY x.Age),
    rn = ROW_NUMBER() OVER (ORDER BY x.Gender DESC, x.Age)
  FROM @x AS x ) SELECT @html = @html + 
    CHAR(13) + CHAR(10) + CASE WHEN c1.gn = 1 THEN 
        CASE WHEN c1.rn > 1 THEN '' ELSE '' END + '
  • ' + c1.Gender ELSE '' END + CHAR(13) + CHAR(10) + CHAR(9) + CASE WHEN c1.gn = 1 OR c1.Age <> c3.Age THEN CASE WHEN c1.gn > 1 THEN '
  • ' ELSE '
      ' END + '
    • ' + CONVERT(VARCHAR(32), c1.Age) ELSE '' END + CHAR(13) + CHAR(10) + CHAR(9) + CHAR(9) + CASE WHEN (c1.gn = 1 OR c1.Age <> c3.Age) THEN '
        ' ELSE '' END + '
      • ' + c1.Name + '
      • ' + CASE WHEN c1.Age <> c2.Age OR c1.dr <> c2.dr THEN '
      ' ELSE '' END FROM x AS c1 LEFT OUTER JOIN x AS c2 ON c1.rn = c2.rn - 1 LEFT OUTER JOIN x AS c3 ON c1.rn = c3.rn + 1 ORDER BY c1.Gender DESC, c1.Age; SELECT @html = @html + '
'; PRINT @html; -- note you will need to deal with this -- in another way if the string is large

And here is proof that it works:

enter image description here

by Aaron Bertrand from http://stackoverflow.com/questions/10300830